2015-10-12 49 views
3

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

作为一个例子,我有一个测试,只是打印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 

回答

2

在客户端连接到主机/端口兼用的两个参数的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 
相关问题