打开与本地服务器的websocket连接
我正在使用图书馆。我希望能够连接到运行在同一erlang/elixir环境中的测试服务器,以便测试发送的消息。当我尝试使用elixir套接字连接到本地主机时,我得到一个不存在的域错误 例如,我有一个测试,它只打印Web服务器接收到的消息来说明这一点打开与本地服务器的websocket连接,websocket,tdd,elixir,Websocket,Tdd,Elixir,我正在使用图书馆。我希望能够连接到运行在同一erlang/elixir环境中的测试服务器,以便测试发送的消息。当我尝试使用elixir套接字连接到本地主机时,我得到一个不存在的域错误 例如,我有一个测试,它只打印Web服务器接收到的消息来说明这一点 defmodule MyTest do use ExUnit.Case test "socket" do port = 9999 SingleServer.start_link(port) :timer.sleep(
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
在客户端,要连接到主机/端口,请使用两个参数之一
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