「java连接wss」Java连接池

博主:adminadmin 2022-11-29 22:32:09 90

本篇文章给大家谈谈java连接wss,以及Java连接池对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java 调用wss使用什么框架

在js中调用WSS提供的要领是一个会经常运用到的东西,为一个js调用WSS的通用代码,直接拿过来用就可以。

核心部分跟Ajax的核心代码基本相同,都是先构造一个XMLHttpRequest或者ActiveXObject对象,然后就是XML的发送和接收。

SPAPI_Core 

function SPAPI_Core() 

{

        this.createXMLHttpRequest = function()

        {

                 if (typeof XMLHttpRequest != "undefined")

                 {

                          return new XMLHttpRequest();

                 }

                 else if (typeof ActiveXObject != "undefined")

                 {

                          return new ActiveXObject("Microsoft.XMLHTTP");

                 }

                 else

                 {

                           throw new Error("XMLHttpRequest not supported");

                  }

         }

         this.executeRequest = function(serviceUrl, action, packet, params)

         {

                 var oXMLHttpRequest = this.createXMLHttpRequest();

                 var result = null;

                 var resultName;

                 

                 oXMLHttpRequest.open("POST", serviceUrl, false);

                 oXMLHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");

                 oXMLHttpRequest.setRequestHeader("SOAPAction", action);

                 if (params != null)

                 {       

                           for (var i=0; i  params.length; i++)

                           {

                                       packet = packet.replace('{' + i.toString() + '}', (params[i] == null ? '' : params[i]));

                                       }

                   }

                   oXMLHttpRequest.send(packet);

                   resultName = action.substring(action.lastIndexOf('/') + 1) + 'Result';

'Result';

                   var resBatch;

                   var status;

                   var statusText;

                   status = oXMLHttpRequest.status;

                   statusText = oXMLHttpRequest.statusText;

                   if (status == 200)

                   {

                            // Check for SharePoint error code

                            resBatch = oXMLHttpRequest.responseXML.getElementsByTagName(resultName);

                            var codeEl = oXMLHttpRequest.responseXML.getElementsByTagName('ErrorCode');

                            if (codeEl != null  codeEl.length  0)

                            {

                                      var spStatus = parseInt(codeEl[0].childNodes[0].nodeValue);

                                      if (spStatus != 0)

                                      {

                                                status = 0-spStatus; // Note we make this -ve to prevent confusion with the HTTP code

                                                var messageEl = oXMLHttpRequest.responseXML.getElementsByTagName('ErrorText');

                                                if (messageEl != null  messageEl.length = 0)

                                                {

                                                         statusText = messageEl[0].childNodes[0].nodeValue;

                                                 }

                                         }

                              }

                     }

                     result = {

                     status : status,

                     statusText : statusText,

                     responseXML : oXMLHttpRequest.responseXML,

                     responseText : oXMLHttpRequest.responseText,

                     resultNode : (resBatch == null resBatch.length == 0 ? null : resBatch[0])

                     };

                     return result;

          } 

}

然后就是写WSS中各个要领的调用接口,WSS中提供的要领特别多,这里就不一一列举了,有需要可以追问。

电子口岸端口61231开启wss服务启动失败

解决方法:一般情况下是java进程还在运行导致的。启动任务管理器,在进程里面把java.exe和javaw.exe的程序全部杀掉即可。

1.前提是直接ws服务可以起来,但是wss用自己签的证书就不行的前提下

2.在浏览器设置允许从本机使用不安全证书

自己生成的证书,没有经过验证,jdk不认可 

启动服务器

使用SSLCre请求生成一个jssecacerts

将jssecacerts替换成D:\Program Files\Java\jdk1.8.0_171\jre\lib\security下的cacerts

要记得改名字 。

如何让java websocket服务端 支持wss

客户端:

client

1

2

3

4

5

6

7

!DOCTYPE html

html

body

h1WebSocket/h1

script src="client.js"/script

/body

/html

client.js

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

var ws = new WebSocket("ws://127.0.0.1:8080/");

ws.onopen = function() {

alert("Opened");

ws.send("I'm client");

};

ws.onmessage = function (evt) {

alert(evt.data);

};

ws.onclose = function() {

alert("Closed");

};

ws.onerror = function(err) {

alert("Error: " + err);

};

服务端可以用各种语言去实现,Java可以用Jetty,C#可以用SuperSocket,这里我举例用Node.js,创建server.js:

var WebSocketServer = require('ws').Server

, wss = new WebSocketServer({port: 8080});

wss.on('connection', function(ws) {

ws.on('message', function(message) {

console.log('received: %s', message);

});

ws.send('something');

});

运行方式:

1

2

npm install ws

node server.js

http\https下websocket的ws\wss链接

websocket在http下使用的是new WebSocket(' ws://xxx' )方式连接,在域名改为https后,websocket出现错误。

按照websocket连接标准来对应:

也就是在https下应该使用wss协议做安全链接,且wss下不支持ip地址的写法,写成域名形式。

实际上浏览器并没有严格的限制http下一定使用ws,而不能使用wss,经过测试http协议下同样可以使用wss协议链接。

在https下能打开ws连接么? 答案是不能, 因为浏览器不允许

1.Firefox环境下https不能使用ws连接

2.chrome内核版本号低于50的浏览器是不允许https下使用ws链接

3.Firefox环境下https下使用wss链接需要安装证书

实际上主要是问题出在Firefox以及低版本的Chrome内核浏览器上,于是在http与https两种协议都支持的情况下可以做兼容处理,即在http协议下使用ws,在https协议下使用wss。

最好下面这样使用可解决兼容问题。

参考链接:

java http可以websocket不行

解决方案如下:

因为HTTPS是基于SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密,所以在HTTPS站点调用某些非SSL验证的资源时浏览器可能会阻止。

方案一:假设HTTPS站点使用Nginx服务器,其他服务器也是类似的思路,可以用服务器代理ws服务,可以用nginx的WebSocket proxying。

这样客户端请求的是wss://服务器,通过nginx的WebSocket proxying代理到实际不支持ssl的websocket服务器。

方案二:直接为WebSocket服务器增加ssl证书,这样就可以直接通过wss://来请求服务器了,以swoole为例,其他服务器也是类似的思路。

SRWebSocket中的WSS证书验证

    SRWebSocket是FaceBook提供的,一个iOS端常用的websocket框架。这个框架的好处是,解决了一般的websocket框架中,粘包、断包的问题,这个问题完全不用开发人员关注,拿到的消息都是完整的。关于SRWebSocket的源码解析可以参考: 。

    本篇主要介绍在SRWebSocket的实际应用中,应该如何使用框架来完成WSS的验证。

    可能有的同学不了解WSS和WS的区别,或者WSS和HTTPS的区别,请参考这里: 。

    首先,需要后端提供支持WSS的端口,这样我们创建连接的时候,url类似这样:wss://{host}:{port}/path......。

    然后,创建一个NSMutableURLRequest,根据框架提供的类扩展NSMutableURLRequest (SRCertificateAdditions)方法,将证书文件数组设置进去  - (void)setSR_SSLPinnedCertificates:(NSArray *)SR_SSLPinnedCertificates; 

    最后,创建SRWebSocket实例:self.socket = [[SRWebSocket alloc]initWithURLRequest:request];

    这样,框架会自动使用证书来进行SSL验证。

java连接wss的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于Java连接池、java连接wss的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-29,除非注明,否则均为首码项目网原创文章,转载请注明出处。