我正在尝试创建一个简单的脚本,以便每次更新文件时将每个文件中的数据发送到客户端。我测试过并发现文件已被读取,但客户端没有收到任何内容。控制台中没有错误。我对socket.io很新。
node.js代码
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var fs = require("fs");
var port = process.env.PORT || 3000;
app.get('/', function(req, res){
res.sendFile(__dirname + '/popup.html');
});
fs.watchFile("assets/popup.json", {interval:100}, function(curr, prev)
{
fs.readFile("assets/popup.json",{encoding:"utf8"}, function(err, data){
io.emit("popup", data)
})
});
http.listen(port, function(){
console.log('listening on *:' + port);
});
客户代码
var socket = io();
socket.on('popup', function(msg){
alert("hello")
});
答案 0 :(得分:1)
每当事情不能正常工作时,你需要求助于“调试模式”。在该模式中,您需要收集可能发生的所有可能事件,并查看您从中学到的内容。为此,请将此代码添加到客户端:
var socket = io();
socket.on('popup', function(msg){
console.log("hello: ", msg)
});
socket.on('connection, function() {
console.log("client connected");
});
socket.on('connect_error', function(err) {
console.log("client connect_error: ", err);
});
socket.on('connect_timeout', function(err) {
console.log("client connect_timeout: ", err);
});
这些消息都记录在socket.io Github site上的客户端文档中,您可以随时通过Google搜索“socket.io github”找到这些消息。
然后,查看页面加载时您在浏览器控制台中看到的内容。如果您不知道如何在您使用的任何浏览器中打开浏览器控制台,请将其谷歌查找。您需要在页面加载时查看调试控制台。
仅供参考,我们假设您已在此代码之前通过脚本标记将socket.io加载到页面中。如果没有,该错误也将显示在控制台中。
然后OP出现此错误:
client connect_error:
Error: server error at Socket.onPacket (socket.io-1.2.0.js:1)
at XHR.<anonymous> (socket.io-1.2.0.js:1)
at XHR.Emitter.emit (socket.io-1.2.0.js:1)
at XHR.Transport.onPacket (socket.io-1.2.0.js:1)
at callback (socket.io-1.2.0.js:2)
at Object.exports.decodePayload (socket.io-1.2.0.js:2)
at XHR.Polling.onData (socket.io-1.2.0.js:2)
at Request.<anonymous> (socket.io-1.2.0.js:2)
at Request.Emitter.emit (socket.io-1.2.0.js:1)
at Request.onData (socket.io-1.2.0.js:2)
好的,进步。你是如何在客户端页面中加载socket.io的?这似乎可能是您在客户端和服务器中有不匹配的socket.io版本。你应该这样做:
<script src="/socket.io/socket.io.js"></script>
然后您的服务器将为客户端页面提供完全相同的socket.io版本。此外,由于此错误报告客户端socket.io 1.2.0,服务器上安装了什么版本的socket.io?
答案 1 :(得分:0)
试试这个
socket.on('popup', function(msg){
socket.emit('message',"popup");
});
答案 2 :(得分:-1)
问题似乎是您实际上没有连接到本地socket.io服务器。通过使用以下代码运行节点server.js,您可以启动Web服务器。然后导航到浏览器中的localhost以查看对popup.json进行的控制台更改。
server.js
var app = require('http').createServer(handler);
var io = require('socket.io')(app);
var fs = require('fs');
app.listen(80);
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(data);
});
}
fs.watchFile("popup.json", {interval: 100}, function (curr, prev) {
fs.readFile("popup.json", {encoding: "utf8"}, function (err, data) {
io.emit("popup", JSON.parse(data));
})
});
的index.html
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io('http://localhost');
socket.on('popup', function (data) {
console.log(data);
});
</script>