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>
我正在尝试实现这个简单的功能,但它无法正常工作。我哪里出错我没看到日志。套接字事件未注册。
答案 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')
。我希望这有效(代码是针对前端的)。