提问者:小点点

ssl不工作的socket.io


我有一个简单的节点.js使用模块的websocket服务器代码 socket.io 但我无法使其工作。服务器运行没有错误,但是当尝试从浏览器连接时,我收到“套接字错误:{”isTrusted“:true}”错误(我没有使用自签名证书,而是经过测试并受浏览器信任的赛门铁克证书)。
这是我的代码:

var fs = require( 'fs' ) ;
var app = require('express')();
var https  = require('https');
var server = https.createServer({    
    key: fs.readFileSync('cert.key'),
    cert: fs.readFileSync('cert.cer'),
},app);
server.listen(50100);
var io = require('socket.io').listen(server,{pingTimeout: 7000, pingInterval: 10000});
io.sockets.on('connection',function (socket) {
    console.log('new connection'); 
});

在客户端上,我使用的是标准java脚本“var WS=new WebSocket(wsUri);”,而wsUri是“wss://siteaddress:50100“。
我尝试了使用“ws”节点模块的代码,它似乎工作得很好,但“ws”模块没有我需要的所有方法(除非我缺少一些东西-我需要能够将消息发送到选定的套接字或所有套接字,并从客户端的套接字连接发送一些信息)。
我用SSL尝试了node.js、socket.io中的所有建议,但没有一个对我有效。
DEBUG=*nodemyapp尝试了调试-这里是我在日志中得到的:

express:application set "x-powered-by" to true +0ms
express:application set "etag" to 'weak' +7ms
express:application set "etag fn" to [Function: wetag] +2ms
express:application set "env" to 'development' +1ms
express:application set "query parser" to 'extended' +0ms
express:application set "query parser fn" to [Function: parseExtendedQueryString] +1ms
express:application set "subdomain offset" to 2 +0ms
express:application set "trust proxy" to false +1ms
express:application set "trust proxy fn" to [Function: trustNone] +1ms
express:application booting in development mode +2ms
express:application set "view" to [Function: View] +1ms
express:application set "views" to '/opt/bitnami/apache2/wm/node/views' +0ms
express:application set "jsonp callback name" to 'callback' +1ms
socket.io:server initializing namespace / +145ms
socket.io-parser encoding packet {"type":0,"nsp":"/"} +1ms
socket.io-parser encoded {"type":0,"nsp":"/"} as 0 +1ms
socket.io:server creating engine.io instance with opts {"pingTimeout":7000,"pingInterval":10000,"path":"/socket.io","initialPacket":["0"]} +0ms
socket.io:server attaching client serving req handler +10ms

当客户端尝试连接到websocket时,日志中不会显示任何内容。< br >有人能告诉我正确的方向吗?< br >谢谢。


共2个答案

匿名用户

尝试添加相应端口的运输和来源

在< code>var io = require('socket.io ')之后。监听(服务器....)

添加这个:

io.set('transports', ['websocket']); io.set('origins', 'YOUR_ORIGIN:*');

检查您的规则是否在 apache 或 nginx 上正确设置,以便您拥有 wss。

匿名用户

服务器端:

`var express = require('express');
var app = express();
var server = app.listen(8080);
var io = require('socket.io').listen(server);`

客户端:

<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>

var mySocket = io.connect('localhost:8080', {transports: 
 ['websocket'], reconnection: false,secure:false}); 

mySocket.on('connect', function () {
    mySocket.sendBuffer=[]
    console.log('Connected!');
});  

如果您的浏览器登录已连接,则表示已建立连接