socket.io-client无法连接

时间:2014-03-29 23:53:06

标签: node.js socket.io

我正在尝试使用socket.io和socket.io-client连接两个node.js服务器。在这两种情况下,我使用的是v0.9.16。

就我而言,我将服务器称为STREAM SERVER和活动服务器使用socket.io-client模块的ACTIVITY SERVER。

STREAM SERVER - (服务器上的代码与服务器相似)

var https = require('https');
var express = require('express');
var socket = require('socket.io');
var securePort = (process.env.LOCAL_HTTPS_PORT || 443);
var sslOptions = //CERTIFICATE
var socketIoConfiguration = //CONFIG VALUES
var app = express();
var server = https.createServer(sslOptions, app);
var io = socket.listen(server, socketIoConfiguration('activityToStream'));
io.sockets.on('connection', function (socket) {
    console.log('Activity server connected to stream server.');
});
server.listen(securePort);

ACTIVITY SERVER - (与服务器类似的服务器代码)

var socketClientModule = require('socket.io-client');
var streamConnectionServer = 'https://165.225.144.273:443';
var activityToStreamSocket = socketClientModule.connect(streamConnectionServer);
activityToStreamSocket.on('connect', function(socket){
    console.log('Connected to Stream Server');
});

当我运行此代码时,我从任一服务器都收不到任何消息。但是,当我从Chrome中提供的HTML页面运行此代码时,我会看到Stream服务器输出上的消息:

<!DOCTYPE html>
<html>
<head>
    <title>
        Test
    </title>
    <script src="https://165.225.144.273/socket.io/socket.io.js"></script>
    <script>
        var socket = io.connect('https://165.225.144.273');
        socket.on('news', function (data) {
            console.log(data);
            socket.emit('my other event', { my: 'data' });
        });
    </script>
</head>
<body>
    Hello World
</body>
</html>

当客户在CHROME中运行时,STREAM服务器消息

debug: client authorized
info: handshake authorized UaUDRsA3ZBTgdsiLDCrl
debug: setting request GET /socket.io/1/websocket/UaUDRsA3ZBTgdsiLDCrl
debug: set heartbeat interval for client UaUDRsA3ZBTgdsiLDCrl
debug: client authorized for 
debug: websocket writing 1::

所以,这让我觉得问题出在我的&#34; ACTIVITY SERVER&#34;运行socket.io-client,但我无法弄清楚为什么它根本不工作(没有错误消息等)

4 个答案:

答案 0 :(得分:3)

使用相同版本的套接字服务器和客户端

答案 1 :(得分:0)

我能够使用以下方法让它工作:

1)使用此命令的socket.io v 1.0.0-pre

npm install git+https://github.com/LearnBoost/socket.io.git

2)scoket.io-client v 1.0.0-pre使用此命令

npm install git+https://github.com/LearnBoost/socket.io-client.git

3)我使用了来自CA的SSL证书而不是自签名,然后我使用了DNS名称而不是IP地址(see this on not using unsigned certificates with Socket.io

这是我的服务器和客户端(服务器充当客户端)。参考Socket.io-client GitHub page

服务器代码

var sslOptions = //CERTIFICATE
var app = require('express')();  // Express 3.x
var server = require('https').Server(sslOptions, app);
var io = require('socket.io')(server);
io.on('connection', function(socket) {
    console.log('Connection from Activity Server');
    for (var i=0; i<100000; i++) {
        io.emit('event', i);
    }
});
server.listen(443);

客户端代码(作为客户端的服务器)

var now = Date.now();
var socket = require('socket.io-client')('https://example.com:443');
socket.on('connect', function(){
    console.log('Connected to Stream Server');
    socket.on('event', function(data){
        console.log('Ping ' + data);
        console.log(now + '   ' + Date.now());
    });
});

使用这个Socket.io代码,我每秒能够获得超过13,000条消息。这是在同一数据中心的两台Joyent服务器上完成的(内存256 MB,CPU 0.125和突发,网络速率高达10 Gbit / s)。

当做更多的&#34; Ping Pong&#34;样式消息传递,我每秒能够获得大约650条消息。

请注意,性能数字只是一个参考数据点,我没有进行任何调整,加载负载等。

答案 2 :(得分:0)

我有同样的问题,但我的解决方案很简单:

我的代码在这里错了:

var serverSocket = ioclient.connect('127.0.0.1:6000');

然后我写了&#39; ws://&#39;在&#39; 127.0.0.1&#39;之前,它开始起作用。

var serverSocket = ioclient.connect('ws://127.0.0.1:6000');

这让我头疼了好几个小时。

答案 3 :(得分:0)

我遇到了同样的情况,但我通过切换 socketio-client 版本解决了这个问题。我得到了 socketio 2.3 版。但我得到了 socketio-client 3.1 版。我使用“npm install socket.io-client@2.3”更改了socketio客户端的版本。在我的客户端 js 文件中,我像这样使用 socket.io-client

const io = require('socket.io-client');
const socket = io('ws://localhost:3000',{
  
});