gpt4 book ai didi

javascript - 如何使用 socket.io 发送消息

转载 作者:行者123 更新时间:2023-11-30 13:21:40 32 4
gpt4 key购买 nike

我想使用 socket.io 和 node 作为我的“推送通知功能”的层,所以我同时运行 apache 和 node。

我的服务器( Node )上有以下代码

var app = require('http').createServer(handler)
, io = require('C:/path/to/file/socket.io').listen(app)
, fs = require('fs');

app.listen(8080);

function handler(req, res) {
console.log(req);
fs.readFile('C:/path/to/file/index.html',
function (err, data) {
if (err) {
console.log(err);
res.writeHead(500);
return res.end('Error loading index.html');
}

res.writeHead(200);
res.end(data);
});
}

io.sockets.on('connection', function (socket) {
socket.on('my event', function (msg) {
console.log("DATA!!!");
});
});

然后页面由 apache 从没有 8080 端口的本地主机提供服务

在客户端我有以下代码:

var socket = io.connect('http://localhost:8080');

点击按钮时:

socket.emit('my event', {data:"some data"});

我在 Node 控制台上什么也看不到……这是为什么?跨域问题?

更新:它在 safari 5.1.5 甚至 IE 9 上工作得很好,但在 chrome(18.0.1025.151) 或 firefox (11.0) 上却不行……我错过了什么?

这是 Node 日志:

   info  - socket.io started
debug - served static content /socket.io.js
debug - client authorized
info - handshake authorized 4944162402088095824
debug - setting request GET /socket.io/1/websocket/4944162402088095824
debug - set heartbeat interval for client 4944162402088095824
debug - client authorized for
debug - websocket writing 1::
debug - setting request GET /socket.io/1/xhr-polling/4944162402088095824?t=13
33977095905
debug - setting poll timeout
debug - discarding transport
debug - cleared heartbeat interval for client 4944162402088095824

最佳答案

这应该可以正常工作,只需确保在您的 index.html 中有:

<script src="http://localhost:8080/socket.io/socket.io.js"></script>

此外,由于您是通过 Apache 为您的页面提供服务,因此您实际上不需要 Node 文件中的处理程序和 http 服务器。这应该可以正常工作:

var io = require('socket.io').listen(8080);
io.sockets.on('connection', function (socket) {
socket.on('my event', function (msg) {
console.log("DATA!!!");
});
});

对于 index.html :

<!DOCTYPE html>
<html lang="en">

<head>
<title>Hello World!</title>
<meta charset="utf-8">

<script src="http://localhost:8080/socket.io/socket.io.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var socket = io.connect('http://localhost:8080');
$("#button").click(function() {
socket.emit('my event' ,"Hello World!");
})
})
</script>
</head>

<body>
<button type="button" id='button'>Send Message</button>
</body>

</html>

编辑:这适用于 Firefox 和 Chrome。

关于javascript - 如何使用 socket.io 发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10071406/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com