socket.io不适用于简单的用例

时间:2015-12-19 12:57:51

标签: javascript node.js sockets socket.io

var app = require("http").createServer(handler); // handler defined below
var io = require("socket.io")(app);
var fs = require('fs');
app.listen(8080);

function handler (req, res) {
  fs.readFile(__dirname + "/index.html",
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end("Error loading index.html");
    }
    res.writeHead(200);
    res.end("Hell World");
  });
}


io.on('connection', function(socket){
  socket.on('dataChanged', function(data){console.log("Hello World")});
})

io.emit('dataChanged', 'this is a test')

//index.html
<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost:8080');
  socket.on('dataChanged', function(data){console.log("Hello World")});
</script>

我正在尝试实现这个简单的功能,但它无法正常工作。我哪里出错我没看到日志。套接字事件未注册。

2 个答案:

答案 0 :(得分:1)

这里有三件事。

1。您的res.end正在发送Hell world,但应发送data

res.end("Hell World");

应该是

res.end(data);

这是因为我们要显示index.html文件而不是hello world

2。您的index.html正在调用socket.io js文件错误

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

应该是

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

这是因为您无法引用这样的文件,因为代码中没有逻辑。但是socket.io确实有它的逻辑,可以这样调用

3. 在客户端使用emit

在index.html中更改此代码

socket.on('dataChanged', function(data){console.log("Hello World")});

socket.emit('dataChanged', 'this is a test')

并删除

io.emit('dataChanged', 'this is a test')

来自您的nodejs文件

现在您可以从控制台看到Hello World

答案 1 :(得分:0)

当我尝试使用socket.io创建一个简单的聊天时,我遇到了连接问题,我认为你有同样的问题:我使用了相同的io.connect('http://localhost:8080')但后来我尝试使用IP地址我的计算机在WiFi网络中从其他设备连接(因为localhost指向当前设备) - 所以我的计算机在WiFi网络中的IP地址是192.168.0.103 - &gt; io.connect('http://192.168.0.103')io.connect('http://192.168.1.103')。我希望这有效(代码是针对前端的)。