建立连接后,可以向“主套接字”添加分配吗?

时间:2018-12-31 10:32:28

标签: websocket elixir phoenix-framework

this post所述,当客户端首次与服务器连接时,将创建“主套接字/进程”并保留其分配。稍后,当客户加入特定的频道/主题时,每个频道的套接字/进程都会复制这些分配,并可以将其添加到它们中。

我现在有一个用例,当用户加入他们自己的单独频道(i.e. user:#{user_id})时,我从数据库中检索了有关该用户的一些信息,然后该信息将在该用户以后加入的所有频道中全局可用。但是,我一直无法找到一种方法将这些信息放入socket.assigns中,以便可以在任何地方使用。如果我尝试分配它们,它们将仅在此特定socket.assigns频道的user:#{user_id}中可用。

有办法吗?相反,我应该只是尝试在用户首次连接时一次获取所有这些信息,而不是在他们加入单个用户通道时一次获取这些信息吗?

1 个答案:

答案 0 :(得分:1)

不同的通道意味着不同的插槽。

最简单的解决方案是保持永久状态('use strict'; const unirest = require('unirest'); var getNutritionInfo = { mkString: function (foodStr) { var ingredients = new Array(); ingredients.push(foodStr); console.log(foodStr) params = { ingr: ingredients, }; esc = encodeURIComponent; query = Object.keys(params) .map(k => esc(k) + '=' + esc(params[k])) .join('&'); foodQuery = query.replace(/%20/g, "+"); return (foodQuery); }, analyse: function (foodStr) { url = "https://edamam-edamam-nutrition-analysis.p.rapidapi.com/api/nutrition-data" searchQuery = getNutritionInfo.mkString(foodStr); function requestData(callback) { unirest.get(url + "?" + searchQuery) .header("X-RapidAPI-Key", "c5c219c7b0mshbf5b602f68caddep1cd8cfjsn01a1be1f45a4") .end(function (result) { let cals = result.body.totalNutrients.ENERC_KCAL.quantity; console.log(cals + " first"); callback(cals); // pass value here }); } requestData(function (cals) { // get value after completion console.log(cals + " second"); getNutritionInfo.getData(); }); }, getData: function () { var calories = getNutritionInfo.analyse.cals; console.log(calories + " third"); return calories; } }; AgentETSDETS,...),并持有地图{{1} },并在需要此信息时查询该状态。