1

我正在尝试使用 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);
        }    
 }
4

0 回答 0