Ruby でカスタム ゲーム サーバー プロトコルを作成しようとしていますが、いくつかのことを行う方法/行う方法を理解できていません。
Q->1#
サーバーは、TCPServer/TCPSocket を使用して配列をクライアントに送信します。しかし、転送はバイナリである必要があるため、JSON を使用することはできません。どうすれば Ruby 配列をバイナリに変換し、クライアント側で配列に戻すことができますか?
これは私のサーバーです:
#!/usr/bin/env ruby
require 'socket'
server = TCPServer.new 5020
loop do
Thread.start(server.accept) { |c|
print "new Client connected"
a = ["Hello, there"]
payload_with_header = CustomProtocolModule.constructMethod(a) # what method do i use to convert a (array -> binary representation? don't really understand .unpack, .pack, what template would i use if i did use String#Unpack? will String#Unpack work for what i need?
client.write payload_with_header
client.close
}
end
(上記は私の最初の質問です)
Q->2#
次に、メッセージの終わりを確認するために何らかの終了を使用する必要があること、またはクライアント/サーバーが完全なメッセージを受信したかどうかを判断する方法が必要であることを知っているので、メッセージのサイズを含むようにペイロードの最初の 2 バイトを設定できますか? ? これをサーバー側とクライアント側で行うにはどうすればよいですか? 受信側は TCPSocket.recv をループする必要がありますか? 最初の 2 バイト (ヘッダー) を受信するまで、最初の 2 バイトに含まれるサイズを読み取りますか? このようなものは、私が念頭に置いていたものです:
| Payload Header (2 bytes) | array (contains cmd, message etc) |
誰かが私を正しい方向に導くのを手伝ってくれたり、役立つ疑似コードを提供してくれたりしたら。それは大歓迎です。具体的には、ヘッダーをループし、ペイロードを配列に読み込んでペイロードヘッダーを構築する方法に興味があります。
ありがとう!