2015-09-19 3 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 с недавним приложением Phoenix. Убедитесь, что вы используете 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

Полное раскрытие информации - я нооб, и я, вероятно, что-то напортачил, но так я вернулся на правильный путь.

rm -rf deps/phoenix 

Это очистит вашу нынешнюю версию феникса (которая включает в себя phoenix.js)

mix do deps.get 

Это тянет вниз феникс снова.

Надеюсь, этого достаточно, чтобы ты снова в этот момент, - но если вы облажались миграцию, как я, и вы на Mac/Linux, сделайте:

find . -name phoenix.js 

вуаля, там это phoenix.js, зафиксированный Хосе. Я был ленив и просто скопировал этот phoenix.js, чтобы все было в порядке.

Смежные вопросы