我想创建一个类似聊天的应用程序,所以开始使用nodejs和socket.io。为了简单起见(首先,我想了解它是如何工作的),我做了一个按钮向服务器发出消息,反过来应该(在我新手的理解中)改变当前指向那个的所有网页的段落的内容。 URL。我的问题是,我发出消息的网页内容发生了变化,但对指向同一网址的其他网页的同一段落没有任何反应。
这是我的代码:
// This is server.js
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, 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(data);
});
}
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
socket.on('user_event', function (data) {
socket.emit("to_all_users","something has changed");
console.log(data);
});
});
以下是我的HTML(客户端)文件(只有相关部分):
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost');
socket.on('to_all_users', function (data) {
var msgs=document.getElementById("my_messages");
msgs.innerHTML=data;
});
function send_to_server(){
socket.emit("user_event","Here is the new news");
}
</script>
</head>
<body>
<button onclick="send_to_server()">CHECKBUTTON</button>
<p id="my_messages">Here is the messages</p>
What I did:
我在google-chrome上打开了两个localhost:8080并点击了其中一个的CHECKBUTTON。
What I expected
:两个标签(localhost:8080)中id = my_messages的段落更改为数据 - &#34;某些内容已更改&#34;
What actually happened:
段从我点击按钮更改为所需的字符串。它证明了消息传递到服务器,它是服务器发出的响应,触发了页面中的事件以更改段落。但是没有发生任何事情(localhost:8080)。
我错过了什么?我是否从根本上在错误的方向思考?
答案 0 :(得分:1)
更改server.js中的1行
//来自
socket.emit("to_all_users","something has changed");
//到
io.sockets.emit("to_all_users", "something has changed");