私はnode.jsについて数週間前から読んでいました。私はLinuxとLinuxのサーバ(基本的にはUbuntu Linux)上で、nodeとsocket.ioといくつかの他のパッケージ(expressといくつかは私が覚えていないもの)をインストールしました。私はいくつかのチュートリアルを見つけてそれらを通って、クライアントのどれかにメッセージをサーバーに送り返すことはできません。Socket.ioクライアントがサーバーに接続していない
シンプルなチャットルーム http://vivahate.com/2011/03/25/a-simple-chat-room-in-node-js/
シンプルSocket.ioリアルタイムのチャット http://webdevrefinery.com/forums/topic/7991-simple-socketio-real-time-chat/:ここで私が通過したチュートリアルのいくつかは、(私はより多くを持っていますが、サイトは私がより多くのリンクを投稿することはできないだろう)です
webdevrefineryにはウェブ上にライブデモがあり、ブラウザでは2台の異なるコンピュータから動作します。ダウンロードして実行したコードへのリンクがあり、サーバーは正常に動作します。私は自分のLAN上のURL(192.168.0.30:3000)に行き、URLを参照するとすぐに正しいHTMLとコンソール出力 "debug-served static /socket.io.js"を表示します。私が情報を入力し、それが "入力"何も起こりません。私はコードにアラートを入れ、 "sendMsg()"の "socket.send"行で失敗するようです。
server.js:
var http = require('http'),
sys = require('sys'),
fs = require('fs'),
io = require('socket.io');
var server = http.createServer(function(req, res) {
fs.readFile('chat.html', 'binary', function(err, data) {
if(err) {
res.writeHead(500, {'Content-type': 'text/html'});
res.write(data + "\n");
res.end();
return;
}
res.writeHead(200, {'Content-type': 'text/html'});
res.write(data, 'binary');
res.end();
});
});
server.listen(3000);
var socket = io.listen(server);
socket.on('connection', function(client) {
client.on('message', function(data) {
console.log("Message: " + JSON.stringify(data));
socket.broadcast(data);
});
client.on('disconnect', function() {
});
});
client.html
<html>
<head>
<style type="text/css">
#msgs {
height: 50%;
overflow-y: scroll;
}
div.odd {
background-color: gray;
}
</style>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script type="text/javascript" src="http://192.168.0.30:3000/socket.io/socket.io.js"></script>
<title>Realtime Chat Test</title>
</head>
<body>
<div id="container">
<div id="msgs"></div>
<div id="form">
<form id="chat" action="javascript:sendMsg()">
Username:<input type="text" name="username" /><br />
Message:<input id="msg" type="text" name="message" /><br />
<input type="submit" />
</form>
</div>
</div>
</body>
<script type="text/javascript">
var socket = new io.Socket("192.168.0.30", {port:3000});
socket.connect();
var classes = new Array('even', 'odd');
var numMsgs = 0;
function reconnect() {
if(socket.connecting) {
setTimeout('reconnect()',1000);
}
else if(!socket.connected) {
socket.connect();
setTimeout('reconnect()',1000);
}
}
socket.on('disconnect', function() {
reconnect();
});
socket.on('message', function(data) {
var ms = JSON.parse(data);
if(ms.username !== undefined && ms.message !== undefined) {
numMsgs++;
$('#msgs').append(function() {
var d = $('<div class="'+classes[numMsgs%2]+'"/>');
d.text(ms.username + ' says: ' + ms.message);
return d;
});
var objDiv = document.getElementById('msgs');
objDiv.scrollTop = objDiv.scrollHeight;
}
});
function sendMsg() {
var values = {};
$.each($('#chat').serializeArray(), function(i,v) {
values[v.name] = v.value;
});
document.getElementById("msg").value = "";
socket.send(JSON.stringify(values));
}
</script>
</html>
私が使用しているのLinuxのディストリビューションのようなXか何かを持っていませんが、ここで私が使用しているコードがあります私はWindowsマシンからすべてのブラウジングを行うので、私はlocalhostからテストしていないのですが、HTMLが提供されていることが証明されているので、他のホストからもうまくいくはずです。ページ。なぜクライアントからサーバーにメッセージが届かないのかについてのアイデアはありますか?私は、私が試した約8つの他のチュートリアルと同じミスをしていると仮定していますが、私はいつも同じ問題があります。ありがとう。
ダリル
ありがとうございました!私が見つけたすべてのチュートリアルは、たとえ先月作ったとしても、「古い」と思われます。実際に現在動作しているチュートリアルは知っていますか?私は、古くなったコードベースのために働くコードを手に入れようとすると、それほど大きくない。ああ、あなたが提供したコードスニペットはうまくいきましたが、単なるサーバーではなく、サーバーとクライアントを持つことにはどういう関係があるのでしょうか。 0.6と0.7の違いを持つsocket.ioページが助けられましたが、それには指示がないホームページに単にリンクする情報へのリンクのようなものがあります。 – Darryl
@Darryl私はクライアントとサーバーを持っています!しかし、簡単にするために、私はそれをすべて1つのファイルに入れました!私は多くの新しいチュートリアルを知らないが、この例は興味深い例=> http://www.danielbaulig.de/socket-ioexpress/である。また、私はgithub(WIKI)=> https://github.com/learnboost/socket.io/wikiとhttp://socket.ioでドキュメントを指摘したいと思います。 – Alfred
私のチュートリアルに言及するため+1)@Darryl:あなたは実際には[socket.io](http://socket.io/)で単純な例を使用し、そこから成長する必要があります。それは愚かな証拠のアプローチです。より複雑な例を取り、あなたのニーズに合わせて減らすことは、成功していない道ではありません。 –