検索

1. はじめに

最初は Socket.IO の公式 Web サイトです: http://socket.io

公式ウェブサイトは非常にシンプルで、APIドキュメントはなく、参考用の簡単な「使い方」のみです。なぜなら、Socket.IOは公式Webサイトと同じくらいシンプルで使いやすく、使いやすいからです。

それでは、Socket.IO とは一体何なのでしょうか? Socket.IO は、クライアント側の js とサーバー側の nodejs を含む WebSocket ライブラリです。その目的は、さまざまなブラウザーやモバイル デバイスで使用できるリアルタイム アプリケーションを構築することです。 WebSocket、AJAX ロングポーリング、Iframe ストリーミングなどのさまざまな方式からブラウザに応じて最適な方式を自動的に選択してリアルタイム ネットワーク アプリケーションを実装するため、非常に便利で使いやすく、サポートされているブラウザは次のとおりです。 IE5.5 程度であれば、ほとんどのニーズを満たすことができるはずです。

2. インストールと展開

2.1 インストール

まず、node.js 環境では、インストールは非常に簡単です。

という一文だけです。

コードをコピーします コードは次のとおりです:

npm installsocket.io

2.2 Express を組み合わせてサーバーを構築する

express は、HTTP サーバーを構築するときによく使用される小さな Node.js Web アプリケーション フレームワークです。そのため、Socket.IO と Express を例として直接使用して説明します。

コードをコピーします コードは次のとおりです:

var Express = require('express')
、app =express()
、サーバー = require('http').createServer(app)
、io = require('socket.io').listen(server);
サーバー.listen(3001);

Express を使用しない場合は、socket.io/#how-to-use を参照してください

3. 基本的な使い方

これは主にサーバー側とクライアント側の 2 つのコードに分かれており、どちらも非常に単純です。

サーバー (app.js):

コードをコピーします コードは次のとおりです:

//上記のコードを続けます
app.get('/', function (req, res) {
res.sendfile(__dirname '/index.html');});

io.sockets.on('接続', 関数 (ソケット) {
ソケット.emit('ニュース', { hello: '世界' });
socket.on('その他のイベント', function (data) {
console.log(データ);
});
});

まず、io.sockets.on 関数は、クライアントが接続を開始するためのイベントとして文字列「connection」を受け取ります。接続が成功すると、socket パラメーターを指定したコールバック関数が呼び出されます。 socket.IO を使用するときは、基本的にこのコールバック関数でユーザーのリクエストを処理します。

ソケットの最も重要な関数は、exit 関数と on 関数です。前者はイベントを送信 (発行) します (イベント名は文字列で表されます)。デフォルトのイベント名もいくつかあります。その後にオブジェクトが続き、ソケットに送信されたコンテンツを表します。後者はイベント (イベント名は文字列で表されます) を受け取り、その後にイベントの受信時に呼び出されるコールバック関数が続きます。ここで、data は受信したデータです。

上記の例では、ニュース イベントを送信し、他のイベント イベントを受信しました。その後、クライアントには対応する受信イベントと送信イベントが必要になります。はい、クライアント コードはサーバー コードの正反対であり、非常によく似ています。

クライアント (client.js)

コードをコピーします コードは次のとおりです:



varソケット = io.connect('http://localhost');
socket.on('ニュース', 関数 (データ) {
console.log(データ);
socket.emit('他のイベント', { my: 'データ' });
});

注意すべき点が 2 つあります。socket.io.js パスは正しく記述する必要があります。このファイルは実際にはサーバー側の node_modules フォルダーに配置されるため、このファイルはリダイレクトされます。このファイルがサーバー側に存在しないのは驚くべきことではありませんが、なぜこのファイルはまだ正常に機能するのでしょうか?もちろん、サーバー側のsocket.io.jsファイルをローカルにコピーして、それをクライアント側のjsファイルにすることもできます。これにより、毎回Nodeサーバーからjsファイルをリクエストする必要がなくなり、安定性が向上します。 。 2 番目のポイントは、varソケット = io.connect('website address or ip'); を使用してソケット オブジェクトを取得し、そのソケットを使用してイベントを送受信できるようにすることです。イベント処理に関して、上記のコードは、「ニュース」イベントを受信した後、受信したデータを印刷し、「その他のイベント」イベントをサーバーに送信することを示しています。

注: 「disconnect」などの組み込みのデフォルト イベント名は、クライアント接続が切断されることを意味し、「message」はメッセージが受信されることを意味します。不要なトラブルを避けるために、カスタム イベント名は、Socket.IO に組み込まれているデフォルトのイベント名と同じ名前にしないでください。

4. その他の一般的に使用される API

1) すべてのクライアントにブロードキャストします:socket.broadcast.emit('ブロードキャスト メッセージ');

2) ルームに入ります (使い方は非常に簡単です。これは名前空間に相当し、他のルームのクライアントやルーム外のクライアントに影響を与えることなく、特定のルームにブロードキャストできます)。 );

3) メッセージをルームにブロードキャストします (送信者はメッセージを受信できません):socket.broadcast.to('your room name').emit('broadcast room message');

4) ルームにメッセージをブロードキャストします (送信者がメッセージを受信できることを含みます) (この API は io.sockets に属します): io.sockets.in('別のルーム名').emit('ブロードキャスト ルーム メッセージ' );

5) WebSocket 通信の使用を強制します: (クライアント)socket.send('hi')、(サーバー)socket.on('message', function(data){}) を使用して受信します。

5. Socket.IO を使用してチャット ルームを構築します

最後に、簡単な例を示してこの記事を終わります。 Socket.IO を使用してチャット ルームを構築するには、約 50 行のコードのみが必要で、リアルタイム チャット効果も非常に優れています。キーコードは以下に掲載されています:

サーバー (socketChat.js)

コードをコピー コードは次のとおりです:

//クライアントがサーバーに接続するときのクライアント接続の辞書
//一意のsocketIdが生成され、辞書はsocketIdとユーザー情報(ニックネームなど)のマッピングを保存します
var connectionList = {};

exports.startChat = function (io) {
io.sockets.on('接続', 関数 (ソケット) {
// クライアントが接続するときに、socketId とユーザー名を保存します
varソケットId =ソケット.id;
ConnectionList[ソケットId] = {
ソケット: ソケット
};

//ユーザーがチャット ルーム イベントに入り、自分のユーザー名を他のオンライン ユーザーにブロードキャストします
socket.on('join', function (data) {
ソケット.broadcast.emit('broadcast_join', data);
ConnectionList[socketId].username = data.username;
});

//ユーザーがチャット ルーム イベントから退出し、他のオンライン ユーザーに退出をブロードキャストします
socket.on('切断', function () {
If (connectionList[socketId].username) {
ソケット.broadcast.emit('broadcast_quit', {
ユーザー名: connectionList[socketId].username
});
}
delete connectionList[socketId];
});

//ユーザーのスピーチイベント。スピーチの内容を他のオンラインユーザーにブロードキャストします
ソケット.on('言う', 関数 (データ) {
ソケット.broadcast.emit('broadcast_say',{
ユーザー名: connectionList[socketId].username,
テキスト: data.text
});
});
})
};

クライアント(socketChatClient.js)

コードをコピーします コードは次のとおりです:

varソケット = io.connect('http://localhost');
// サーバーに接続したら、すぐに「参加」イベントを送信し、他のユーザーにユーザー名を伝えます
ソケット.emit('結合', {
ユーザー名: 'ユーザー名へへ'
});

//トークルーム参加ブロードキャスト受信後、メッセージを表示
socket.on('broadcast_join', function (data) {
console.log(data.username 'チャット ルームに参加しました');
});

//チャットルーム退出ブロードキャストを受信後、メッセージを表示します
ソケット.on('broadcast_quit', function(data) {
console.log(data.username 'チャット ルームから退出しました');
});

//他の人からメッセージを受信した後、メッセージを表示します
socket.on('broadcast_say', function(data) {
console.log(data.username 'say: ' data.text);
});

//ここでは、テキスト ボックス textarea と送信ボタンがあると仮定します。btn-send
//jQuery を使用してイベントをバインドします
$('.btn-send').click(function(e) {
//テキストボックスのテキストを取得します
var text = $('textarea').val();
//say イベントを送信すると、サーバーは受信時にそれをブロードキャストします
ソケット.emit('言う', {
ユーザー名: 'ユーザー名 hehe'
テキスト: テキスト
});
});

これはシンプルなチャット ルームのデモです。ニーズに応じて拡張できます。 Socket.IO は基本的にさまざまなイベントの送信と受信の処理を行います。その考え方は非常にシンプルです。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Java vs JavaScript:開発者向けの詳細な比較Java vs JavaScript:開発者向けの詳細な比較May 16, 2025 am 12:01 AM

Javaandjavascriptaredistinctlanguages:javaisusedforenterpriseandmobileapps、whilejavascriptisforinteractivewebpages.1)javaiscompiled、staticatically、andrunsonjvm.2)javascriptisisterted、dynamsornoded.3)

JavaScriptのデータ型:ブラウザとNodejsに違いはありますか?JavaScriptのデータ型:ブラウザとNodejsに違いはありますか?May 14, 2025 am 12:15 AM

JavaScriptコアデータ型は、ブラウザとnode.jsで一貫していますが、余分なタイプとは異なる方法で処理されます。 1)グローバルオブジェクトはブラウザのウィンドウであり、node.jsのグローバルです2)バイナリデータの処理に使用されるNode.jsの一意のバッファオブジェクト。 3)パフォーマンスと時間の処理にも違いがあり、環境に従ってコードを調整する必要があります。

JavaScriptコメント://および / * *を使用するためのガイドJavaScriptコメント://および / * *を使用するためのガイドMay 13, 2025 pm 03:49 PM

javascriptusestwotypesofcomments:シングルライン(//)およびマルチライン(//)

Python vs. JavaScript:開発者の比較分析Python vs. JavaScript:開発者の比較分析May 09, 2025 am 12:22 AM

PythonとJavaScriptの主な違いは、タイプシステムとアプリケーションシナリオです。 1。Pythonは、科学的コンピューティングとデータ分析に適した動的タイプを使用します。 2。JavaScriptは弱いタイプを採用し、フロントエンドとフルスタックの開発で広く使用されています。この2つは、非同期プログラミングとパフォーマンスの最適化に独自の利点があり、選択する際にプロジェクトの要件に従って決定する必要があります。

Python vs. JavaScript:ジョブに適したツールを選択するPython vs. JavaScript:ジョブに適したツールを選択するMay 08, 2025 am 12:10 AM

PythonまたはJavaScriptを選択するかどうかは、プロジェクトの種類によって異なります。1)データサイエンスおよび自動化タスクのPythonを選択します。 2)フロントエンドとフルスタック開発のためにJavaScriptを選択します。 Pythonは、データ処理と自動化における強力なライブラリに好まれていますが、JavaScriptはWebインタラクションとフルスタック開発の利点に不可欠です。

PythonとJavaScript:それぞれの強みを理解するPythonとJavaScript:それぞれの強みを理解するMay 06, 2025 am 12:15 AM

PythonとJavaScriptにはそれぞれ独自の利点があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1. Pythonは、データサイエンスやバックエンド開発に適した簡潔な構文を備えた学習が簡単ですが、実行速度が遅くなっています。 2。JavaScriptはフロントエンド開発のいたるところにあり、強力な非同期プログラミング機能を備えています。 node.jsはフルスタックの開発に適していますが、構文は複雑でエラーが発生しやすい場合があります。

JavaScriptのコア:CまたはCの上に構築されていますか?JavaScriptのコア:CまたはCの上に構築されていますか?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc;それは、解釈されていることを解釈しました。

JavaScriptアプリケーション:フロントエンドからバックエンドまでJavaScriptアプリケーション:フロントエンドからバックエンドまでMay 04, 2025 am 12:12 AM

JavaScriptは、フロントエンドおよびバックエンド開発に使用できます。フロントエンドは、DOM操作を介してユーザーエクスペリエンスを強化し、バックエンドはnode.jsを介してサーバータスクを処理することを処理します。 1.フロントエンドの例:Webページテキストのコンテンツを変更します。 2。バックエンドの例:node.jsサーバーを作成します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい