Node.jsで学ぶsocket.io入門(2)

May 03, 2017 am 10:02 AM

socket.io は、イベントに基づいたリアルタイムの双方向通信を提供します。次の記事では、socket.io の基本的なアプリケーションに関する関連情報を主に紹介します。必要な方は参照してください。下に。 。

はじめに

Socket.IO は、タイムリーな双方向のイベントベースの通信をサポートします。すべてのプラットフォーム、すべてのブラウザ、すべてのデバイスで同じ信頼性と速度で動作します。

  • リアルタイム分析: データをクライアントにプッシュし、リアルタイム カウンター、チャート、またはログ クライアントとして表示されます。

  • リアルタイム通信とチャット: Socket.IO「Hello, World」チャット アプリケーションを作成するのに必要なコードはわずか数行です。

  • バイナリ ストリーミング: バージョン 1.0 以降、Socket.IO は、画像、ビデオ、オーディオなどのあらゆる形式のバイナリ ファイル送信をサポートします。

  • ドキュメントの結合: 複数のユーザーが同時にドキュメントを編集し、各ユーザーが加えた変更を確認できるようにします。

サーバーはクライアントに接続します

socket.ioはサーバーとクライアントの両方のAPIを提供します

サーバーsocket.ioはhttp.Serverインスタンスにバインドする必要があります

http .Serverをバインドする

1. 暗黙的なバインディング

は、インスタンス化するとき、またはインスタンス化後に listen またはattach 関数を呼び出すときにポートを渡すことによって暗黙的にバインドされます。 Socket.io は内部で http.Server をインスタンス化してリッスンしますhttp.Server

实例化时传入端口

let io = require('socket.io')(3000)
ログイン後にコピー

直接通过listen或attach函数绑定。listen与attach同义

let io = require('socket.io') 
io.listen(3000) // io.attach(3000)
ログイン後にコピー

2、显示绑定

可以手动指定http.Server

实例化时绑定

let server = require('http').Server(); 
let io = require('socket.io')(server)

server.listen(3000)
ログイン後にコピー

通过listen或attach绑定

let server = require('http').Server(); 
let io = require('socket.io')()

io.listen(server) // io.attach(server)

server.listen(3000)
ログイン後にコピー

可以绑定express或koa等http框架

express

let app = require('express') 
let server = require('http').Server(app) 
let io = require('socket.io')(server)

app.listen(3000)
ログイン後にコピー

koa

let app = require('koa')() 
let server = require('http').Server(app.callback())

let io = require('socket.io')(server)

app.listen(3000)
ログイン後にコピー

监听连接状态

当服务器端与客户端连接成功时,服务端会监听到connection和connect事件(connection与connect同义), 客户端会监听到connect事件, 断开连接时服务端的对应到客户端的socket与客户端均会均会监听到disconnect事件

服务端代码

let server = require('http').Server() 
let io = require('socket.io')(server)

server.listen(3000); 
io.on('connection', socket => { 
 console.log('connect')
 socket.on('disconnect', () => {
 console.log('disconnect')
 })
 socket.disconnect()
})
ログイン後にコピー

运行后打印

connect 
disconnect
ログイン後にコピー
ログイン後にコピー

客户端代码

let socket = io('http://localhost:3000') 
socket.on('connect', () => { 
 console.log('connect')
})
socket.on('disconnect', () => { 
 console.log('disconnect')
})
ログイン後にコピー

运行后打印

connect 
disconnect
ログイン後にコピー
ログイン後にコピー

传输数据

服务器与客户端的socket是一个关联的EventEmitter对象,客户端socket派发的事件可以通以被服务端的socket接收,服务器端socket派发的事件也可以被客户端接受。基于这种机制,可以实现双向交流。

现在模拟这样一种情况:客户端不停发送随机数,当随机数大于0.95时,服务端延时1s后向客户端发送警告以及警告次数

服务端代码

let server = require('http').Server() 
let io = require('socket.io')(server)

server.listen(3000); 
io.on('connection', socket => { 
 socket.on('random', value => {
 console.log(value)
 if (value > 0.95) {
  if (typeof socket.warning === 'undefined') socket.warning = 0
  setTimeout(() => {
  socket.emit('warn', ++socket.warning)
  }, 1000)
 }
 })
})
ログイン後にコピー

socket对象可以用来存储状态信息和自定义数据,如socket.warning

インスタンス化の際、受信ポート

let socket = io('http://localhost:3000') 
let interval = setInterval(() => { 
 socket.emit('random', Math.random())
}, 500)
socket.on('warn', count => { 
 console.log('warning count: ' + count)
})
socket.on('disconnect', () => { 
 clearInterval(interval)
})
ログイン後にコピー

は listen またはattach 関数を通じて直接バインドされます。 Listen は、attach と同義です

io.on('connection', function (socket) { 
 let stream = ss.createStream()
 ss(socket).emit('script', stream)
 fs.createReadStream(__filename).pipe(stream)
})
ログイン後にコピー
2. バインディングを表示しますインスタンス化時に http.Server を手動で指定できます

listen または Attach によってバインドします

let socket = io('http://localhost:3000') 
ss(socket).on('script', stream => { 
 let buffer = '' 
 stream.on('data', data => {
 buffer += data.toString()
 })
 stream.on('end', () => {
 console.log(buffer)
 })
})
ログイン後にコピー
Express や koa などの http フレームワークにバインドできます

express

rrreee🎜koa🎜rrreee🎜🎜🎜接続ステータスの監視🎜🎜🎜🎜🎜サーバーとクライアントが正常に接続されると、サーバーは接続イベントと接続イベント (接続と接続は同義です) をリッスンし、クライアントは接続が切断されると、クライアントに対応するサーバーのソケットとクライアントの両方が切断イベントを監視します🎜🎜サーバーコード🎜rrreee🎜実行後の印刷🎜rrreee🎜クライアントコード🎜rrreee🎜実行後の印刷🎜 rrreee🎜🎜🎜データ転送🎜🎜🎜🎜🎜 サーバーソケットとクライアントソケットは関連付けられた EventEmitter オブジェクトであり、クライアントソケットによって送信されたイベントはサーバーソケットによって受信でき、サーバーソケットによって送信されたイベントはクライアントによって受信することもできます。終了は受け入れられました。この仕組みにより双方向通信が可能となります。 🎜🎜ここで、クライアントが乱数を送信し続ける状況をシミュレートします。乱数が 0.95 より大きい場合、サーバーは 1 秒遅れて警告をクライアントに送信します🎜🎜サーバー コード🎜rrreee🎜 ソケット オブジェクトは次のとおりです。 socket.warning などのステータス情報とカスタム データを保存するために使用されます🎜🎜クライアント コード🎜rrreee🎜🎜🎜トランスポート ストリーム🎜🎜🎜🎜🎜socket.io はストリームを処理できます🎜🎜サーバー コード🎜rrreee 🎜クライアントコード🎜rrreee

以上がNode.jsで学ぶsocket.io入門(2)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Nodeのメモリ制御に関する記事 Nodeのメモリ制御に関する記事 Apr 26, 2023 pm 05:37 PM

ノンブロッキングおよびイベント駆動に基づいて構築されたノード サービスには、メモリ消費量が少ないという利点があり、大量のネットワーク リクエストの処理に非常に適しています。大量のリクエストを前提として、「メモリ制御」に関する問題を考慮する必要があります。 1. V8 のガベージ コレクション メカニズムとメモリ制限 Js はガベージ コレクション マシンによって制御されます

Node V8 エンジンのメモリと GC の詳細な図による説明 Node V8 エンジンのメモリと GC の詳細な図による説明 Mar 29, 2023 pm 06:02 PM

この記事では、NodeJS V8 エンジンのメモリとガベージ コレクター (GC) について詳しく説明します。

最適な Node.js Docker イメージを選択する方法について話しましょう。 最適な Node.js Docker イメージを選択する方法について話しましょう。 Dec 13, 2022 pm 08:00 PM

ノード用の Docker イメージの選択は些細なことのように思えるかもしれませんが、イメージのサイズと潜在的な脆弱性は、CI/CD プロセスとセキュリティに大きな影響を与える可能性があります。では、最適な Node.js Docker イメージを選択するにはどうすればよいでしょうか?

Node の File モジュールについて詳しく説明しましょう Node の File モジュールについて詳しく説明しましょう Apr 24, 2023 pm 05:49 PM

ファイル モジュールは、ファイルの読み取り/書き込み/開く/閉じる/削除の追加など、基礎となるファイル操作をカプセル化したものです。ファイル モジュールの最大の特徴は、すべてのメソッドが **同期** と ** の 2 つのバージョンを提供することです。 asynchronous**、sync サフィックスが付いているメソッドはすべて同期メソッドであり、持たないメソッドはすべて異種メソッドです。

Node.js 19 が正式リリースされました。その 6 つの主要な機能についてお話しましょう。 Node.js 19 が正式リリースされました。その 6 つの主要な機能についてお話しましょう。 Nov 16, 2022 pm 08:34 PM

Node 19 が正式リリースされましたので、この記事では Node.js 19 の 6 つの主要な機能について詳しく説明します。

Node.js の GC (ガベージ コレクション) メカニズムについて話しましょう Node.js の GC (ガベージ コレクション) メカニズムについて話しましょう Nov 29, 2022 pm 08:44 PM

Node.js はどのように GC (ガベージ コレクション) を行うのでしょうか?次の記事で詳しく説明します。

Nodeのイベントループについて話しましょう Nodeのイベントループについて話しましょう Apr 11, 2023 pm 07:08 PM

イベント ループは Node.js の基本的な部分であり、メイン スレッドがブロックされていないことを確認することで非同期プログラミングが可能になります。イベント ループを理解することは、効率的なアプリケーションを構築するために重要です。次の記事では、Node のイベント ループについて詳しく説明します。お役に立てれば幸いです。

ノードがnpmコマンドを使用できない場合はどうすればよいですか? ノードがnpmコマンドを使用できない場合はどうすればよいですか? Feb 08, 2023 am 10:09 AM

ノードが npm コマンドを使用できない理由は、環境変数が正しく設定されていないためです。解決策は次のとおりです: 1. 「システムのプロパティ」を開きます; 2. 「環境変数」->「システム変数」を見つけて、環境を編集します。変数; 3.nodejs フォルダーの場所を見つけます; 4.「OK」をクリックします。

See all articles