1. ホーム
  2. node.js

[解決済み] Socket.ioの最もシンプルな例とは?

2022-08-16 07:46:15

質問

私は最近Socket.ioを理解しようとしていますが、私は超一流のプログラマーではなく、ウェブ上で見つけることができるほとんどすべての例(私を信じて何時間も何時間も探しました)は、物事を複雑にしている余分なものを持っています。多くの例では、私を混乱させるような多くのことを行ったり、奇妙なデータベースに接続したり、coffeescript や大量の JS ライブラリを使用して、物事を混乱させています。

サーバーがクライアントに10秒ごとに何時というメッセージを送り、クライアントがそのデータをページに書き込んだり、警告を出したりするような、とてもシンプルで機能する例を見たいものです。それから、私はそこから物事を考え、DB接続など必要なものを追加していくことができます。そして、私はsocket.ioのサイトの例をチェックしましたが、それらは私のために動作しませんし、それらが何をするのか理解できません。

どのように解決するのですか?

編集してください。 私はそれが誰のために優れたを参照してくださいする方が良いと感じる チャットの例 を参照するのが良いと思います。私がこの回答を提供した後、APIはかなり簡素化されました。とはいえ、ここでは、より新しいAPIのために小さく更新されたオリジナルの回答があります。

今日はいい気分なので。

索引.html

<!doctype html>
<html>
    <head>
        <script src='/socket.io/socket.io.js'></script>
        <script>
            var socket = io();

            socket.on('welcome', function(data) {
                addMessage(data.message);

                // Respond with a message including this clients' id sent from the server
                socket.emit('i am client', {data: 'foo!', id: data.id});
            });
            socket.on('time', function(data) {
                addMessage(data.time);
            });
            socket.on('error', console.error.bind(console));
            socket.on('message', console.log.bind(console));

            function addMessage(message) {
                var text = document.createTextNode(message),
                    el = document.createElement('li'),
                    messages = document.getElementById('messages');

                el.appendChild(text);
                messages.appendChild(el);
            }
        </script>
    </head>
    <body>
        <ul id='messages'></ul>
    </body>
</html>

app.js

var http = require('http'),
    fs = require('fs'),
    // NEVER use a Sync function except at start-up!
    index = fs.readFileSync(__dirname + '/index.html');

// Send index.html to all requests
var app = http.createServer(function(req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end(index);
});

// Socket.io server listens to our app
var io = require('socket.io').listen(app);

// Send current time to all connected clients
function sendTime() {
    io.emit('time', { time: new Date().toJSON() });
}

// Send current time every 10 secs
setInterval(sendTime, 10000);

// Emit welcome message on connection
io.on('connection', function(socket) {
    // Use socket to communicate with this particular client only, sending it it's own id
    socket.emit('welcome', { message: 'Welcome!', id: socket.id });

    socket.on('i am client', console.log);
});

app.listen(3000);