2015-09-19 154 views
4
var socket = new Socket("localhost:4000") 
socket.connect() 

返回WebSocket connection to 'ws://localhost:4000/ws' failed: Error during WebSocket handshake: Unexpected response code: 404插座將無法連接到端點

但我確實對/ws端點插座,對不對?

defmodule Sapphire.Endpoint do 
    use Phoenix.Endpoint, otp_app: :sapphire 

    socket "/ws", Sapphire.MomentSocket 

    plug Plug.Static, 
    at: "/", from: :sapphire, gzip: false, 
    only: ~w(css fonts images js favicon.ico robots.txt) 

    if code_reloading? do 
    socket "/phoenix/live_reload/socket", Phoenix.LiveReloader.Socket 
    plug Phoenix.LiveReloader 
    plug Phoenix.CodeReloader 
    end 

    plug Plug.RequestId 
    plug Plug.Logger 

    plug Plug.Parsers, 
    parsers: [:urlencoded, :multipart, :json], 
    pass: ["*/*"], 
    json_decoder: Poison 

    plug Plug.MethodOverride 
    plug Plug.Head 

    plug Plug.Session, 
    store: :cookie, 
    key: "_sapphire_key", 
    signing_salt: "hW1bFEcR" 

    plug Sapphire.Router 

end 

它應該能夠連接到該端點,但由於某種原因,它根本無法達到它。

[info] Running Sapphire.Endpoint with Cowboy on http://localhost:4000

+3

由於您正在訪問'ws:// localhost:4000/ws',我有一個預感,您正在使用舊鳳凰客戶端與最近的鳳凰應用程序。確保你使用的是Phoenix 1.0.2,並且你擁有Phoenix.js的最新版本。 –

+0

@JoséValim嗯,我已經將https://github.com/phoenixframework/phoenix/blob/master/web/static/js/phoenix.js移植到前端服務於其他服務器的coffeescript中。客戶端自動添加'/ ws',所以我有'socket'/ ws「,Sapphire.MomentSocket'應該在'/ ws'路徑中不可用?即使將兩者都更改爲'/ socket'也會返回相同的404。我對該套接字端點如何暴露感興趣 – iColor

+0

URL是socket_path + transport_name。所以它應該是/ socket/websockets或類似的東西。 –

回答

4

@JoséValim找到了解決辦法。

我正在將phoenix.js庫移植到coffeescript,並且錯過了路徑後綴應該是傳輸層的任何事實。在這種情況下,它在實施的最後需要/websocket。 :)

0

完全披露 - 我是一個noob,我可能搞砸了一些,但這是我如何回到正軌。

rm -rf deps/phoenix 

這將清除出你目前鳳凰的版本(包括phoenix.js)

mix do deps.get 

這再次拉低鳳凰。

希望這是足以讓你在這一點上再次去 - 但如果你搞砸了遷移喜歡我,而你在Mac/Linux上,做了:

find . -name phoenix.js 

瞧,有是Jose所固定的phoenix.js。我很懶,只是複製了phoenix.js來暫時解決問題。