我正在尝试使用 Phoenix 频道在我的应用程序中聊天。我有一个 Web 客户端和一个 Android 客户端。现在它在网络上正常工作。我在 Android 端遇到问题。
它能够接收推送到频道的消息,但不会发送任何消息。当我尝试推送消息时,会抛出以下异常:
java.net.SocketTimeoutException:超时异常
java.lang.IllegalStateException:另一个消息编写器处于活动状态。你有没有调用close()?
我的聊天频道
defmodule GoodApi2.ChatChannel do
use Phoenix.Channel
intercept(["chat_send"])
def join("chat:"<> _room_code, _message, socket) do
{:ok, socket}
end
def handle_in("chat_send", message, socket) do
broadcast! socket, "chat_send", message
{:noreply, socket}
end
def handle_out("chat_send", payload, socket) do
push socket, "new_message", payload
{:noreply, socket}
end
end
在创建频道的 Android 应用上
try{
socket = new Socket("ws:"+ApiUtils.BASE.toString()+"socket/websocket");
socket.connect();
channel = socket.chan("chat:"+chatName, null);
channel.join()
.receive("ok", new IMessageCallback() {
@Override
public void onMessage(Envelope envelope) {
System.out.println("IGNORE");
}
});
}
catch (IOException e) {
System.out.println("error connecting to chat");
e.printStackTrace();
}
在 Android 应用上推送到频道
public void sendMessage(final String message){
ObjectNode node = new ObjectNode(JsonNodeFactory.instance)
.put("sender", email)
.put("sender_name", userName)
.put("content", message);
try{
channel.push("chat_send", node);
}
catch (Exception e){
Log.e("message failed to send", message);
}
}