【发布时间】:2015-10-31 02:23:23
【问题描述】:
此功能在我的应用程序中不起作用。 我无法接收消息 (socket.emit) 从服务器到客户端 (socket.on)。 但我在逆向(客户端到服务器)没有这个问题。
我使用 cloud9,他们的聊天示例运行良好。 这是我的服务器代码:
var http = require('http');
var path = require('path');
var async = require('async');
var socketio = require('socket.io');
var express = require('express');
var router = express();
var server = http.createServer(router);
var io = socketio.listen(server);
router.use(express.static(path.resolve(__dirname, 'client2')));
io.on('connection', function (socket) {
socket.emit('hello', 'i changed'); // !!!
});
server.listen(process.env.PORT || 3000, process.env.IP || "0.0.0.0", function(){
var addr = server.address();
console.log("Chat server listening at", addr.address + ":" + addr.port);
});
以及html页面的代码:
<html>
<head>
<title>test</title>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect();
socket.on('hello', function (msg) { // !!!
document.innerHTML = msg;
});
</script>
</head>
<body>
<p>normal page</p>
</body>
</html>
而且没有任何变化... 编辑:使用 console.log 。 但是消息似乎是通过套接字发送的:
Debugger listening on port 15454
info - socket.io started
Chat server listening at 0.0.0.0:8080
debug - served static content /socket.io.js
debug - client authorized
info - handshake authorized 13XpSYGuXzMpMeyFsRfO
debug - setting request GET /socket.io/1/websocket/13XpSYGuXzMpMeyFsRfO
debug - set heartbeat interval for client 13XpSYGuXzMpMeyFsRfO
debug - client authorized for
debug - websocket writing 1::
debug - websocket writing 5:::{"name":"hello","args":["i changed"]}
你能帮帮我吗?
【问题讨论】:
-
您是否尝试过从 document.innerHTML 更改为 console.log()?可能正在接收数据但未正确添加到页面。
-
是的,我试过了,也没用。
-
我认为在客户端上您可能必须手动指定端口(http 为 80),否则它将尝试访问
http://<workspace-name>-<username>.c9.io:8080。你看看有没有帮助? -
它不起作用。我尝试在代码中将端口更改为 8080: server.listen(8080, process.env.IP || "0.0.0.0", function(){ 然后是 8081 和 8082,要访问网页,我必须使用你的url http://
- .c9.io:8081 等。如何手动指定端口 80 ?它与 url ?这很奇怪,因为它是我尝试使用的一个简单功能(发出) 它在我使用 Cloud9 的聊天示例之前甚至在我使用时都对我有用。所以我不知道出了什么问题。