1
也許我沒有完全理解相關問題中的答案。我得到了長輪詢,反向AJAX的概念,但事情是這樣的:服務器到客戶端的更新沒有來自客戶端的持續/持久請求Websocket編程
我目前的設置是在我的本地單位,我是客戶端,我是服務器。我可以成功建立到我的服務器的連接,並且一旦建立連接,我就可以向客戶端發送一條消息,現在又出現了另一個場景,我只希望服務器在建立連接後不斷更新客戶端。爲了簡單起見,假設我希望我的客戶端更新服務器時間,因此每當時間發生變化時,服務器會將最新時間發送給客戶端(假設連接已建立)。
我正在使用node.js和socket.io。以下是我的代碼:
客戶:
<!DOCTYPE html>
<meta charset="utf-8" />
<title>WebSocket Testing</title>
<script src="/socket.io/socket.io.js"></script>
<script language="javascript" type="text/javascript">
var socket = new io.connect("http://127.0.0.1:8080");
socket.on('connect', function(){
// socket.on('news', function (data) {
// socket.emit('my other event', { my: 'data' });
socket.on("test",function(data){
alert(data);
});
socket.onmessage = function (event) {
console.log(event.data);
}
});
console.log(socket);
</script>
<h2>WebSocket Test</h2>
<div id="output"></div>
</html>
SERVER:
var socketOptions = {
transportOptions: {
'xhr-polling': {
closeTimeout: 20000000, //20 mins
timeout: 20000000 //20 mins
}
}
};
var app = require('http').createServer(handler)
, url = require('url')
, io = require('socket.io').listen(app,socketOptions)
, fs = require('fs')
app.listen(8080);
function handler (req, res) {
var path = url.parse(req.url).pathname;
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
console.log("ERROR: "+err)
res.writeHead(500);
return res.end('Error loading index.html');
}
// res.writeHead(200);
//res.writeHead(200, {'Content-Type': path == 'json.js' ? 'text/javascript' : 'text/html'})
res.writeHead(200, {'Content-Type': 'text/html'});
console.log("THIS IS IT");
res.end(data);
});
}
console.log(io);
io.sockets.on('connection', function (socket) {
// socket.send("testing lang kung nagsesend");
// console.log("connection");
// socket.emit('news', { hello: 'world' });
// socket.on('my other event', function (data) {
// console.log(data);
// });
socket.emit("test","Test connection message established,send and received");
});
我該怎麼做我的服務器代碼?我可以注意到,幾乎所有的代碼示例都是使用php格式的。
它會設置每個連接從客戶端後間隔。應該是在app.listen之後(8080); ? – 2013-02-21 08:45:18
是的,這也是可能的!但取決於你在找什麼。此外,如果您使用此方法,請務必在斷開連接事件後保持乾淨時刪除間隔。 – GiveMeAllYourCats 2013-02-21 08:49:11
我認爲,如果是這種情況,但是不會對我的服務器造成負擔?如果場景是發生變化值的變化,我應該應用if..then語句的常規邏輯嗎?也許我的問題是socket io是否具有連續向服務器提供數據的功能? 「 – Charmie 2013-02-21 10:14:14