【问题标题】:Opening a websocket connection to a local server打开到本地服务器的 websocket 连接
【发布时间】:2015-10-14 00:52:02
【问题描述】:

我正在使用elixir-socket 库。我希望能够连接到在同一 erlang/elixir 环境中运行的测试服务器,以便测试发送的消息。当我尝试使用 elixir 套接字连接到 localhost 时,出现不存在的域错误。

作为一个例子,我有一个测试,它只打印网络服务器接收到的消息来说明这一点。

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

【问题讨论】:

    标签: websocket tdd elixir


    【解决方案1】:

    在客户端连接到主机/端口时,使用两个参数 connect!connect! 成对传递:

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

    在服务器端,accept! 似乎在做一些不同的事情,具体取决于你传递给它的是服务器还是客户端套接字。如果您传递服务器,它会等待客户端连接并返回客户端套接字。如果您传递客户端套接字,它会“接受”连接(而不是 close!ing 它),所以服务器端代码应该是这样的:

    server = Socket.Web.listen!(port)
    client = Socket.Web.accept!(server)
    Socket.Web.accept!(client)
    
    client |> Socket.Web.recv! |> IO.inspect
    

    【讨论】:

      猜你喜欢
      • 2019-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      相关资源
      最近更新 更多