ホームページ  >  記事  >  バックエンド開発  >  Golang jsonrpc2 サーバーはどこでリッスンしますか?

Golang jsonrpc2 サーバーはどこでリッスンしますか?

王林
王林転載
2024-02-08 21:27:28718ブラウズ

Golang jsonrpc2 服务器在哪里监听?

Golang jsonrpc2 サーバーはどこでリッスンしますか?これは、多くの Golang 開発者が jsonrpc2 プロトコルを使用するときによく遭遇する問題です。 Golang では、jsonrpc2 サーバーがどこでリッスンするかは、コードの実装方法によって異なります。一般的な方法は、クライアントからのリクエストを受信するためにサーバーに特定のポートをリッスンさせることです。さらに、ローカル ループバック インターフェイス (localhost) や指定された IP アドレスなど、特定のネットワーク インターフェイス上でサーバーを監視することもできます。サーバーがリクエストをリッスンして正常に処理できるようにするには、開発者はコード内でリッスンする場所を明確に指定する必要があります。

質問内容

golangで簡単なlspサーバーを作成したいのですが、これまでに書いたコードは次のとおりです。 リーリー

それは機能しますが、どのポートで実行されるのか、または一般にクライアント経由でそれを呼び出す方法がわかりません。何かアイデアがある人はいますか?

ポート 4389 であるべきだと思いますが、それではありません

このスクリプトをテストに使用しています:

リーリー

このクライアントは別のスタックオーバーフローの質問から取得したので、これは正しいと思います。

解決策

なるほど:

リーリー

これは、コードがネットワーク接続経由​​の

ではなく、標準入出力 (stdin/stdout) 経由で json-rpc を使用することを意味します。 os.stdin
jsonrpc2.newbufferedstream への引数として使用する場合、入力がサーバーを実行しているプロセスの標準入力から取得されるように指定します。応答は標準出力に送信されます。 したがって、サーバーはどのネットワーク ポートでもリッスンしません。標準入出力に直接送信されるデータと対話します。これは通常、プロセス間通信に使用されます。たとえば、あるプロセスがサーバー プロセスを呼び出して応答を受信する場合などです。

たとえば、「

go: 別のプロセスとの双方向通信?
」または davidelorenzoli/stdin-stdout-ipc を参照してください。 json-rpc サーバーがネットワーク ポートでリッスンするようにするには、

net パッケージ を使用する必要があります。また、http リクエストを URL に送信するのではなく、正しいネットワーク ポートにリクエストを送信するようにクライアント スクリプトを変更する必要もあります。 リーリー これは、

serve

メソッドがローカルホストのポート 4389 でリッスンする TCP リスナーを作成する基本的な例です。次に、接続を待機するループに入り、接続を取得すると、json-rpc サーバーを使用して接続を処理する新しい goroutine を開始します。 クライアント側では、サーバーへの TCP 接続を開き、その接続に json-rpc リクエストを書き込み、応答を読み取る必要があります。

requests ライブラリ は、生の TCP 接続ではなく http リクエスト用であるため、Python スクリプトのように使用できません。 TCP 接続を作成し、それを介してデータを送受信するには、Python またはクライアントの言語で
socket ライブラリ を使用する必要があります。 ただし、

lsp (言語サーバー プロトコル)

はネットワーク ソケットではなく stdin/stdout 上で実行されることに注意してください。 これは、lsp サーバーは通常、エディター/IDE によって子プロセスとして起動され、これらのチャネルを通じて直接通信するためです。したがって、ユースケースによっては、生の stdin/stdout メソッドの方が適切な場合があります。

以上がGolang jsonrpc2 サーバーはどこでリッスンしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。