我有一些验证套接字:
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".
扩展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) 我想在我的应用程序路由中找不到路由时重新转换我的应用程序
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继续执行
我有疑问:
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
我用 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) 我有web app和Ember appiframe.我想从自定义库导入web app到ember 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导入原则.
我在使用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 …
我是亚马逊网络服务(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创建一致的快照?
elixir ×2
ember.js ×2
amazon-ebs ×1
amazon-ec2 ×1
database ×1
ecto ×1
ember-cli ×1
erlang ×1
node.js ×1
php ×1
postgresql ×1
snapshot ×1
socket.io ×1