小编use*_*168的帖子

如何使用Phoenix向特定套接字发送消息

我有一些验证套接字:

defmodule Test.UserSocket do
  use Phoenix.Socket

  ## Channels
  channel "user:*", Test.RoomChannel

  def connect(_params, socket) do
    case Phoenix.Token.verify(socket, "user",  _params["token"]) do
          {:ok, uid} ->
            {:ok, assign(socket, :user_id, uid)}
          {:error, _} ->
            :error
     end
  end

 def id(_socket), do: "user:#{_socket.assigns.user_id}"
end
Run Code Online (Sandbox Code Playgroud)

并在连接套接字后命名为 user:#id

从文档中我可以发送断开连接事件 Test.Endpoint.broadcast("users_socket:" <> user.id, "disconnect", %{})

问题:如何将自定义事件发送到套接字user:#id,它应该像是对特定套接字的推送通知.

我试过Test.Endpoint.broadcast "user:1", "new:msg", %{user: "SYSTEM", body: "iex"}但它不起作用,因为我无法在套接字上听"new:msg".

elixir phoenix-framework

10
推荐指数
1
解决办法
3074
查看次数

在服务器之间扩展socket.io

扩展socket.io应用程序的方法有哪些?我看到以下问题,我不明白如何解决:

  • 如何将缩放的socket.io应用程序广播到房间?换句话说,socket.io将如何知道来自其他服务器的邻居?

我很难想象它应该如何工作 - 也许是所有必要信息的共享变体商店,例如redis - 这是一种可能性吗?

编辑:我发现这篇文章:http://www.ranu.com.ar/2011/11/redisstore-and-rooms-with-socketio.html

在此基础上,我做了以下几点:

   var pub = redis.createClient();  
   var sub = redis.createClient();
   var store = redis.createClient();
   pub.auth("pass");
   sub.auth("pass");
   store.auth("pass");

    io.configure( function(){
io.enable('browser client minification');  // send minified client
io.enable('browser client etag');          // apply etag caching logic based on version number
    io.enable('browser client gzip');          // gzip the file
io.set('log level', 1);                    // reduce logging
io.set('transports', [                     // enable all transports (optional if you want flashsocket)
    'websocket'
  , 'flashsocket'
  , 'htmlfile'
  , 'xhr-polling'
  , …
Run Code Online (Sandbox Code Playgroud)

node.js socket.io

6
推荐指数
1
解决办法
2316
查看次数

如何在转换之前知道路线是否存在

我想在我的应用程序路由中找不到路由时重新转换我的应用程序

export default Ember.Route.extend({
  redirect: function(model, transition) {
    if (transition.targetName == "not-found") {
      var newPath = transition.intent.url  //do some logic
      this.transitionTo(newpath);
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

问题newPath如何在执行之前检查是否存在this.transitionTo(newPath);

在API中我发现只有私有的hasRoute

更新以更好地理解问题

例如我有路线:

Router.map(function() {
  this.route('login'),
  this.route('not-found', { path: '/*wildcard' });
});
Run Code Online (Sandbox Code Playgroud)

当用户请求URI例如en/loginember 加载not-found路由时(默认为通配符)。真实路径是login.

我想删除en并尝试找出login我的应用程序中是否存在路由,否则它将是真正的“未找到”页面

en/login==login并且它是有效的,将重定向到登录

en/abc==abc该路由不存在,not-found继续执行

ember.js

5
推荐指数
1
解决办法
1688
查看次数

无法强制转换为类型:查询中的naive_datetime

我有疑问:

 PhoenixApp.one(from r in PhoenixApp.Reply,
              where: r.inserted_at > ^datatime,
              select: count(r.id))
Run Code Online (Sandbox Code Playgroud)

此查询失败,并显示错误: value '#Ecto.DateTime<2016-12-04 20:11:21>' in 'where' cannot be cast to type :naive_datetime in query:

但是当使用type(^datatime, Ecto.DateTime)它的转换数据时工作.

问题:它发生了什么,看起来像datatime最初有DateTime类型?

使用新的Ecto 2.1.2

elixir ecto phoenix-framework

5
推荐指数
1
解决办法
2708
查看次数

无法在 Erlang 中运行简单的应用程序

我用 Erlang 写了一个简单的应用程序,但它拒绝工作,出现以下错误:

   =SUPERVISOR REPORT==== 18-Jan-2012::15:03:27 ===
 Supervisor: {<0.60.0>,my_sup}
 Context:    start_error
 Reason:     {'EXIT',{undef,[{my,start,[{8077,none}]},
                             {supervisor,do_start_child,2},
                             {supervisor,start_children,3},
                             {supervisor,init_children,2},
                             {gen_server,init_it,6},
                             {proc_lib,init_p_do_apply,3}]}}
 Offender:   [{pid,undefined},
              {name,my},
              {mfa,{my,start,[{8077,none}]}},
              {restart_type,permanent},
              {shutdown,brutal_kill},
              {child_type,worker}]

=INFO REPORT==== 18-Jan-2012::15:03:27 ===
application: my
exited: {shutdown,{my_app,start,[normal,[noarg]]}}
type: temporary {error,{shutdown,{my_app,start,[normal,[noarg]]}}}
Run Code Online (Sandbox Code Playgroud)

和模块:

我的.erl

-module(my).
-export([start/2, stop/0]).

start(Port,_arg) ->
 io:format("starting my").

stop() ->
  ok.
Run Code Online (Sandbox Code Playgroud)

my_app.erl 应用模块,执行 application行为。

 -module(my_app).
 -behaviour(application).
 -export([start/2, stop/1]).

  start(_Type, _Args) ->
   io:format("my server starting~n"),
   my_sup:start_link().

  stop(_State) ->
   io:format("my server terminating~n"),
   ok.
Run Code Online (Sandbox Code Playgroud)

my_sup.erl 主管逻辑

-module(my_sup).
-behaviour(supervisor).
-export([start_link/0]).
-export([init/1]).

start_link() ->
  supervisor:start_link(my_sup, []).

init(_Args) …
Run Code Online (Sandbox Code Playgroud)

erlang

4
推荐指数
1
解决办法
1906
查看次数

在ember-cli中导入自定义库

我有web appEmber appiframe.我想从自定义库导入web appember app类似的全局变量.库看起来像具有功能的对象:

var helpers = {
    helper1: function() {},
    helper2: function() {}
};
Run Code Online (Sandbox Code Playgroud)

库使用套接字,对于两个应用程序都是一样的.

我写:

app.import("./../../../public/scripts/js-helpers.js"); //file located in web app 
Run Code Online (Sandbox Code Playgroud)

我无法访问helpersproject和ember-cli copy文件夹中的变量public到他们的工作文件夹中.对不起,如果问题是愚蠢的,我无法理解ember-cli导入原则.

ember.js ember-cli

4
推荐指数
1
解决办法
2514
查看次数

如何比较 PostgreSQL JSONB 中的数字

我在使用jsonb类型时遇到了奇怪的情况。

预期行为


使用短jsonb结构:

{"price": 99.99}
Run Code Online (Sandbox Code Playgroud)

我写了这样的查询:

 SELECT * FROM table t WHERE t.data->price > 90.90
Run Code Online (Sandbox Code Playgroud)

它失败并出现operator does not exist: jsonb > numeric与 text ( ->>)相同的错误operator does not exist: text > numeric

然后我写了很多资源中提到的比较:

SELECT * FROM table t WHERE (t.data->>price)::NUMERIC > 90.90
Run Code Online (Sandbox Code Playgroud)

它按预期工作。

奇怪的是:


SELECT * FROM table t WHERE t.data->price > '90.90';
Run Code Online (Sandbox Code Playgroud)

有点奇怪,但上面的查询工作正常。

解释: Filter: ((data -> 'price'::text) > '90.90'::jsonb)

但是,如果我将jsonb值更改text 为:{"price": "99.99"} 不再有结果 - 空。

问题:PostgreSQL …

database postgresql

4
推荐指数
1
解决办法
3880
查看次数

使用SDK for PHP制作一致的Amazon EBS快照的正确方法是什么?

我是亚马逊网络服务(AWS)的新手,想要使用AWS SDK for PHP创建Amazon Elastic Block Store(EBS)快照.我写了以下代码:

    $aws = Aws::factory($config);
    $ec2 = $aws->get('Ec2');    
    $ec2->createSnapshot( array('VolumeId'=>'vol-11c22825','Description'=>'My Description') );
Run Code Online (Sandbox Code Playgroud)

快照是正确创建的,但我担心数据完整性.有没有更好的方法来使用PHP SDK创建一致的快照?

php snapshot amazon-ec2 amazon-ebs amazon-web-services

2
推荐指数
1
解决办法
2024
查看次数