可以利用nginx的反向代理,直接去转发web socket,这里所监听的端口是不一样的;
先看html的内容:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>我是来测试的</title> </head> <body> <h1>我是来测试的11111111111</h1> <script type="text/javascript"> //连接服务 // var wsServer = 'wss://api.99img.cn:9501'; var wsServer = 'wss://149.28.16.XXX:9503'; //实例化 var websocket = new WebSocket(wsServer); //监听开启事件(只负责监听,没有实际的开启作用) websocket.onopen = function (evt) { websocket.send('我是来搞事的!!!'); // console.log("连接成功html"); }; //消息 websocket.onmessage = function (evt) { //监听消息后,直接给服务器传递消息 console.log('evt: ' + evt); console.log('来自server的最新消息: ' + evt.data); if (evt.data != '') { alert('我他妈的:'+evt.data); } }; //关闭事件 websocket.onclose = function (evt) { console.log("我关闭了html"); }; //报错 websocket.onerror = function (evt, e) { console.log('Error occured: ' + evt.data); }; </script> </body> </html>
我在这里访问的是'wss://149.28.16.XXX:9503',其中9503是访问的接口,而不是真正实现socket的接口,我用的是swoole,监听的端口是9501;
具体的代码实现我就不写了,有兴趣的盆友可以看我之前写过的文章,里面详细记录了swoole的实现,这里主要是介绍nginx的配置,以及转发;
server {
listen 9503;
# server_name 149.28.16.212;
location / {
proxy_pass http://149.28.16.XXX:9501;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
ssl on;
ssl_certificate /www/server/nginx/ssl_key/jesonc.crt;
ssl_certificate_key /www/server/nginx/ssl_key/jesonc.key;
}