socket.io客户端无法向服务器

时间:2018-03-10 00:52:17

标签: javascript socket.io

我无法弄清楚为什么我的socket.io服务器没有从客户端接收消息。这是我的服务器JS文件:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

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

    console.log('a user connected');

    socket.on('bid', function(msg){
        console.log('received:' + msg);
    });

    socket.on('disconnect', function(){
        console.log('user disconnected');
    });
});

http.listen(3000, function(){
    console.log('listening on *:3000');
});

这是客户端代码:

$(function () {

    var socket = io(':3000/socket.io/socket.io.js');

    $('#bid-form').on('submit',function(){
        socket.emit('bid', 'test');
        console.log('emit');
        return false;
    });
});

当我打开和关闭浏览器页面时,我在服务器控制台上看到“用户连接”和“用户断开连接”消息,因此我知道它正在进行连接。

当我提交表单时,我在浏览器控制台中看到“emit”消息,因此我知道表单提交事件正在触发,但我没有收到服务器上的测试消息。在客户端或服务器端似乎没有发生任何事情,似乎“socket.emit”函数没有做任何事情。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

我的假设是您在localhost上运行快速服务器。

您似乎直接通过file://访问HTML文件,除非您的客户端代码由其他Web服务器托管。但无论如何,这里有你如何连接:

<script src="http://localhost:3000/socket.io/socket.io.js"></script>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>
<script>
  $(function () {
    var socket = io("http://localhost:3000");
    $('#bid-form').on('submit',function(){
      socket.emit('bid', 'test');
      console.log('emit');
      return false;
    });
  });
</script>

您需要通过socket.io.js标记加载script文件。然后通过将socket.io服务器的主机提供给io()函数来连接到socket.io服务器。