0

を使用して、メッセージを反対側のソケットに送信TCPSocketする必要がありsocket.puts "foobar"ます 。socket.closesocket.read

ソケットを介してメッセージを送受信する方法はありますが、ソケットを閉じずに、ソケットを再度作成せずにメッセージを再度送信できますか?

ps websocketのようなもの

4

2 に答える 2

3

スーパー クラス チェーンをたどると、最終的に から継承していることがわかりますIO。RubyのほとんどのIOオブジェクトは、データをバッファリングして、ディスクからの書き込みと読み取りをより効率的にします。

あなたの場合、バッファはフラッシュするのに十分な大きさではありませんでした(または十分な時間が経過しませんでした)。ただし、ソケットを閉じると、バッファ リソースが強制的にフラッシュされました。

いくつかのオプションがあります:

  • を使用して、バッファを手動で強制的にフラッシュできますIO#flush
  • に設定することにより、書き込み/読み取り後に常に同期するようにバッファを設定できIO#sync=ますtrueIOを使用して、オブジェクトの同期のステータスを確認できますIO#sync。私はあなたが見ると思いますsocket.sync #=> false
  • BasicSocket#sendwhich を使用してPOSIXを呼び出しsend(2)ます。ソケットはset で初期化O_FSYNCれるため、送信は同期的かつアトミックになります。
于 2013-05-05T14:44:46.913 に答える
1

It should not be neccessary to close the connection in order for the other party to read it. send should transfer the data over the conection immediately. Make sure the other party is reading from the socket.

于 2013-05-05T11:04:52.817 に答える