2015-10-12 48 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 
相關問題