socket.io客户端无法与不同端口的套​​接字服务器通信

时间:2016-10-27 00:19:24

标签: node.js websocket socket.io

我正在使用socket.io学习 nodejs 事件驱动编程,以便我可以构建一个聊天应用。

所以,我现在在Server创建了一个Clientlocalhost在不同的端口运行。

服务器位于8080

var express = require('express');
var app = express();
var http = require('http').createServer(app);
var io = require('socket.io')(http, {origins: '*.*', transports: ['websocket', 'xhr-polling']});
var port = process.env.PORT || 8080;

http.listen(port, function () {
    console.log('Cat Server listening at http://127.0.0.1:%d', port);
});

app.use(express.static(__dirname + '/public'));

io.on('connection', function (socket) {

    console.log('Connection to client established ', socket);

    var addedUser = false;

    // when the client emits 'love event', this listens and executes
    socket.on('LoveEvent', function (data) {
        console.log("we tell the client to execute 'logevent'")
        socket.broadcast.emit('LoveEvent', {
            username: socket.username,
            message: data
        });
    });
);

3000

的客户

客户端通过socket.io

连接到服务器8080

我在public/chat.js

中包含public/index.html中的以下代码
  var socket = io();
  socket.connect('http://localhost:8080', {transports: ['websocket', 'xhr-polling']})
  console.log("Connection to Cat socket server, ", socket)

而且,public/index.html

  <script src="http://localhost:8080/socket.io/socket.io.js"></script>
  <script src="/chat.js"></script>

客户端结构

$ ll
total 24
-rw-r--r--   1 prayagupd  staff    30 Nov  1 20:18 README.md
-rw-r--r--   1 prayagupd  staff   325 Nov  1 20:18 Server.js
drwxr-xr-x  91 prayagupd  staff  3094 Oct 26 18:11 node_modules
-rw-r--r--   1 prayagupd  staff   249 Nov  1 20:18 package.json
drwxr-xr-x   8 prayagupd  staff   272 Nov  1 20:22 public

node_modules socket.js

$ ll node_modules/socket.io/lib/
total 80
-rw-r--r--  1 prayagupd  staff  5411 Oct 26 15:59 client.js
-rw-r--r--  1 prayagupd  staff  8933 Oct 26 15:59 index.js
-rw-r--r--  1 prayagupd  staff  5366 Oct 26 15:59 namespace.js
-rw-r--r--  1 prayagupd  staff  9493 Oct 26 15:59 socket.js

BUT

当我启动服务器时

$ node Server.js 
Cat Server listening at http://127.0.0.1:8080

和客户,

$ node Client.js 
Cat client running at localhost:3000

我希望在服务器端发送连接消息,因为我正在使用Server.js中的消息进行调试console.log('Connection to client established ', socket);

我手动尝试从chorme控制台创建socket并发送了一个事件,服务器似乎没有订阅它。

s.connect("http://localhost:8080", {autoConnect : true})
Socket {io: Manager, nsp: "/", json: Socket, ids: 0, acks: Object…}
s.emit("LoveEvent", "Love")
Socket {io: Manager, nsp: "/", json: Socket, ids: 0, acks: Object…}

此外,当浏览器中的客户端在浏览器控制台中的404 error上跟随transport=polling时,

enter image description here

我不知道为什么在端口3000上进行轮询,这本身就是这样。

当一切都在同一台服务器上时,它运行良好。我现在重构了它:(

我这里有后端和前端代码=&gt; prayagupd/lovejs

3 个答案:

答案 0 :(得分:0)

当客户端和socket.io服务器是分开的时,您应该在客户端的“socket.io”子文件夹中下载并复制socket.io客户端库(https://github.com/socketio/socket.io-client处的socket.io.js) app(例如)然后像这样导入它:

<script src="/socket.io/socket.io.js"></script>

或者不复制它,您只需从CDN导入它:

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

(没有互联网连接就行不通。)

你可以从服务器上删除socket.io路由,在这种情况下没用:

io = require('socket.io')({ serveClient: false, ...});

答案 1 :(得分:0)

可能是您的来源*.**:* how to set origins的格式,但socket.io应该可以在不同的端口上运行。

答案 2 :(得分:0)

这也发生在我身上, 但我从 socket.io 版本 3 更改为 2 => "socket.io": "^2.3.0" 并解决了问题。