打开与本地服务器的 websocket 连接
Opening a websocket connection to a local server
我正在使用 elixir-socket 库。我希望能够连接到同一 erlang/elixir 环境中的测试服务器 运行,以便我可以测试发送的消息。当我尝试使用 elixir 套接字连接到本地主机时,出现域不存在的错误。
举个例子,我有一个测试,它只打印网络服务器收到的消息来说明这一点。
defmodule MyTest do
use ExUnit.Case
test "socket" do
port = 9999
SingleServer.start_link(port)
:timer.sleep(2_000)
socket = Socket.Web.connect! "0.0.0.0:#{port}"
socket |> Socket.Web.send! { :text, "test" }
:timer.sleep(2_000)
end
end
defmodule SingleServer do
def start_link(port) do
spawn_link __MODULE__, :init, [port]
end
def init(port) do
server = Socket.Web.listen! port
client = server |> Socket.Web.accept!
client = server |> Socket.Web.accept!
client |> Socket.Web.recv! |> IO.inspect
end
end
在客户端连接到 host/port 使用双参数 connect!
或 connect!
传递一对:
Socket.Web.connect!("localhost", port)
|> Socket.Web.send!({ :text, "test" })
在服务器端有点违反直觉 accept!
似乎在做一些不同的事情,这取决于你传递给它的是服务器套接字还是客户端套接字。如果您传递服务器,它会等待客户端连接和 returns 客户端套接字。如果您将客户端套接字传递给它 "accepts" 连接(而不是 close!
ing 它),那么服务器端代码应该是这样的:
server = Socket.Web.listen!(port)
client = Socket.Web.accept!(server)
Socket.Web.accept!(client)
client |> Socket.Web.recv! |> IO.inspect
我正在使用 elixir-socket 库。我希望能够连接到同一 erlang/elixir 环境中的测试服务器 运行,以便我可以测试发送的消息。当我尝试使用 elixir 套接字连接到本地主机时,出现域不存在的错误。
举个例子,我有一个测试,它只打印网络服务器收到的消息来说明这一点。
defmodule MyTest do
use ExUnit.Case
test "socket" do
port = 9999
SingleServer.start_link(port)
:timer.sleep(2_000)
socket = Socket.Web.connect! "0.0.0.0:#{port}"
socket |> Socket.Web.send! { :text, "test" }
:timer.sleep(2_000)
end
end
defmodule SingleServer do
def start_link(port) do
spawn_link __MODULE__, :init, [port]
end
def init(port) do
server = Socket.Web.listen! port
client = server |> Socket.Web.accept!
client = server |> Socket.Web.accept!
client |> Socket.Web.recv! |> IO.inspect
end
end
在客户端连接到 host/port 使用双参数 connect!
或 connect!
传递一对:
Socket.Web.connect!("localhost", port)
|> Socket.Web.send!({ :text, "test" })
在服务器端有点违反直觉 accept!
似乎在做一些不同的事情,这取决于你传递给它的是服务器套接字还是客户端套接字。如果您传递服务器,它会等待客户端连接和 returns 客户端套接字。如果您将客户端套接字传递给它 "accepts" 连接(而不是 close!
ing 它),那么服务器端代码应该是这样的:
server = Socket.Web.listen!(port)
client = Socket.Web.accept!(server)
Socket.Web.accept!(client)
client |> Socket.Web.recv! |> IO.inspect