「java连接wss」Java连接池
本篇文章给大家谈谈java连接wss,以及Java连接池对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java 调用wss使用什么框架
- 2、电子口岸端口61231开启wss服务启动失败
- 3、如何让java websocket服务端 支持wss
- 4、http\https下websocket的ws\wss链接
- 5、java http可以websocket不行
- 6、SRWebSocket中的WSS证书验证
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的信息别忘了在本站进行查找喔。
发布于:2022-11-29,除非注明,否则均为
原创文章,转载请注明出处。