连接本地服务器的WebSocket连接

3
我正在使用elixir-socket库。我希望能够连接到在相同的erlang / elixir环境中运行的测试服务器,以便测试发送的消息。当我尝试使用elixir socket连接到本地主机时,出现了不存在的域错误。
例如,我有一个测试仅打印web服务器接收到的消息来说明这一点。
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
1个回答

2

在客户端连接到主机/端口,可以使用两个参数的 connect! 或传入一对参数的 connect!

Socket.Web.connect!("localhost", port)
|> Socket.Web.send!({ :text, "test" })

在服务器端,有点反直觉的是,accept!似乎会根据你传递给它的参数(服务器套接字还是客户端套接字)执行不同的操作。如果你传递一个服务器套接字,那么它将等待客户端连接并返回客户端套接字。如果你传递客户端套接字,则它将“接受”连接(而不是关闭它),因此服务器端代码应该如下:

server = Socket.Web.listen!(port)
client = Socket.Web.accept!(server)
Socket.Web.accept!(client)

client |> Socket.Web.recv! |> IO.inspect

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接