繁体   English   中英

Node.js,express和socket.io:socket.on不会从服务器接收到客户端的消息socket.emit

[英]Node.js, express and socket.io : socket.on doesn't receive message socket.emit from the server to the client

此功能在我的应用中不起作用。 我无法 从服务器发送到客户端 (socket.on) 的消息 (socket.emit)。 但是我没有相反的问题(客户端到服务器)。

我使用cloud9,他们的聊天示例效果很好。 这是我的服务器代码:

var http = require('http');
var path = require('path');
var async = require('async');
var socketio = require('socket.io');
var express = require('express');

var router = express();
var server = http.createServer(router);
var io = socketio.listen(server);
router.use(express.static(path.resolve(__dirname, 'client2')));


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

  socket.emit('hello', 'i changed');  // !!!

});


server.listen(process.env.PORT || 3000, process.env.IP || "0.0.0.0", function(){
  var addr = server.address();
  console.log("Chat server listening at", addr.address + ":" + addr.port);
});

以及html页面的代码:

<html>
  <head>
    <title>test</title>

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

  var socket = io.connect();

  socket.on('hello', function (msg) {     // !!!
        document.innerHTML = msg;
   });


    </script>
  </head>
  <body>

  <p>normal page</p>

   </body>
</html>

而且没有变化...编辑:要么与console.log。 但是消息似乎是通过套接字发送的:

Debugger listening on port 15454                                                                                                                                                                                                       
   info  - socket.io started                                                                                                                                                                                                           
Chat server listening at 0.0.0.0:8080                                                                                                                                                                                                  
   debug - served static content /socket.io.js                                                                                                                                                                                         
   debug - client authorized                                                                                                                                                                                                           
   info  - handshake authorized 13XpSYGuXzMpMeyFsRfO                                                                                                                                                                                   
   debug - setting request GET /socket.io/1/websocket/13XpSYGuXzMpMeyFsRfO                                                                                                                                                             
   debug - set heartbeat interval for client 13XpSYGuXzMpMeyFsRfO                                                                                                                                                                      
   debug - client authorized for                                                                                                                                                                                                       
   debug - websocket writing 1::                                                                                                                                                                                                       
   debug - websocket writing 5:::{"name":"hello","args":["i changed"]}  

你能帮我吗 ?

你需要改变

var socket = io.connect();

通过

var socket = io.connect('http://0.0.0.0:8080');

var socket = io.connect()<-这应该指定您要连接的域。

所以我做了很多工作,试图让它正常工作,但我却不像您那样工作,我是一个初学者,与您的编码方式不兼容,但我发现问题出在io正在使用的端口

var io = socketio.listen(server);

或html获取连接的位置

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

对我来说,HTML在其自己的目录中请求一个js文件,但事实并非如此。

当我使用socket.io时,我将其放入服务器中

var client = require("socket.io").listen(8080).sockets

主要部分是监听,它监听端口8080,在我的html中,

var socket = io.connect("http://127.0.0.1:8080");

哪个可行,对此我很抱歉,我基本上可以确定这不是一个答案,但是我已经尝试过,即使一年零三个月过去了,我也希望您能成功。

    $(function(){
  var socket = io();
  socket.on('hello',function(data){
    $('#lblmsg').text(data.message);
  });
});

这是我正在处理的东西。 在我的代码的第4行中,传递了数据并检索了data.message。 但您在html页面上直接将msg与innerhtml等效(在注释的代码中!!!!!)

看看您是否还在努力!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM