server.js
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
app.use(express.static(__dirname + '/public'));
io.on('connection', function(client) {
console.log('Client connected...');
client.on('join', function(data) {
console.log(data);
io.emit('messages', 'Hello');
});
});
的index.html
<script>
var socket = io.connect('http://localhost:7777');
socket.on('connect', function(data) {
socket.emit('join', 'Hello World from client');
});
socket.on('messages', function(data) {
alert(data);
});
</script>
我试图实现非常基本的Socket.io。
但是,从客户端发送到服务器的数据可用,但从服务器到客户端不起作用。
在运行server.js的命令中,打印“来自客户端的Hello World”。但是,警报窗口在Web浏览器中不起作用。(我也尝试过console.log)。
如何解决这个问题?
Editted
我把server.js代码放在app.get('/',function(req,res)){...}中 然后,它不起作用。为什么它在app.get中不起作用?
答案 0 :(得分:1)
试试这个,我希望它有效:
io.on('connection', function(client) {
console.log('Client connected...');
client.on('join', function(data) {
console.log(data);
io.emit('join', data); //this code sending data from server to client
});
});
答案 1 :(得分:1)
如果您只是尝试使用Ajax调用(例如/test
)获取某些数据,则无需使用socket.io。这只是一个经典的请求/响应。
app.get('/test', function(req, res) {
// collect your data and then send it as a response
res.json(data);
});
如果您只是尝试将数据合并到所请求的网页中,那么您可以将res.render()
与您选择的模板引擎一起使用(ejs,把手,哈巴狗等......) 。通常看起来像这样:
app.get('/test', function(req, res) {
// collect your data and then pass it to res.render() to render your
// your template using that data
res.render('someTemplateName', data);
});
socket.io最有用的主要是&#34;推送&#34;没有客户端请求的服务器到客户端的数据。因此,如果客户端不知道的服务器上发生了某些事情并且服务器想要告诉客户端它,那么socket.io将用于此。经典的例子是聊天应用程序。人员A向发送给人员B的服务器发送聊天消息。服务器接收该消息,然后需要&#34;推送&#34;这对于已经连接的socket.io连接是完美的,因为服务器可以直接将数据推送到Person B客户端,这是服务器无法处理请求/响应的事情(因为没有来自B)的请求。
如果你仍然认为你需要socket.io,那么请准确描述你正在尝试用它做什么(逐步你试图发送给客户端)。
答案 2 :(得分:0)
ginput documentation
请将“消息”更改为对我有用的“消息”