使用 Socket.io 将客户端连接到服务器

新手上路,请多包涵

我对 node.js 比较陌生,它是插件,所以这可能是一个初学者的问题。

我正在尝试在网络服务器上获取一个简单的 HTML 页面,并使用 websocket.io 连接到另一个运行 node.js 的服务器。

我的代码如下所示:

客户

<script src="socket.io/socket.io.js"></script>
<script>
    // Create SocketIO instance, connect

    var socket = new io.Socket();

    socket.connect('http://127.0.0.1:8080');

    // Add a connect listener
    socket.on('connect',function() {
      console.log('Client has connected to the server!');
    });
    // Add a connect listener
    socket.on('message',function(data) {
      console.log('Received a message from the server!',data);
    });
    // Add a disconnect listener
    socket.on('disconnect',function() {
      console.log('The client has disconnected!');
    });

    // Sends a message to the server via sockets
    function sendMessageToServer(message) {
      socket.send(message);
    };
</script>

服务器端

// Require HTTP module (to start server) and Socket.IO
var http = require('http');
var io = require('socket.io');
var port = 8080;

// Start the server at port 8080
var server = http.createServer(function(req, res){
    // Send HTML headers and message
    res.writeHead(200,{ 'Content-Type': 'text/html' });
    res.end('<h1>Hello Socket Lover!</h1>');
});

server.listen(port);

// Create a Socket.IO instance, passing it our server
var socket = io.listen(server);

// Add a connect listener
socket.on('connection', function(client){
    console.log('Connection to client established');

    // Success!  Now listen to messages to be received
    client.on('message',function(event){
        console.log('Received message from client!',event);
    });

    client.on('disconnect',function(){
        clearInterval(interval);
        console.log('Server has disconnected');
    });
});

console.log('Server running at http://127.0.0.1:' + port + '/');

启动服务器工作正常,在我的浏览器中运行 http://localhost:8080 也可以,按预期返回“Hello Socket Lover”。但我想让不同的页面与套接字对话,而不是从 node.js 运行一个。

但是当我运行它时,什么也没有发生,Chrome 控制台返回:

 Failed to load resource            http://undefined/socket.io/1/?t=1333119551736
Failed to load resource            http://undefined/socket.io/1/?t=1333119551735

我整天都在这。有什么帮助吗?

原文由 shmow 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 703
1 个回答

您是否尝试过不从相对 URL 加载 socket.io 脚本?

您正在使用:

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

和:

 socket.connect('http://127.0.0.1:8080');

你应该试试:

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

和:

 socket.connect('http://localhost:8080');

切换 localhost:8080 适合您当前设置的任何内容。

此外,根据您的设置,当从不同的域(同源策略)加载客户端页面时,您可能会遇到与服务器通信的一些问题。这可以通过不同的方式来克服(在这个答案的范围之外,google/so it)。

原文由 Lior Cohen 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题