小编kra*_*r65的帖子

如何处理奇怪的组合websocket消息?

我使用节点ws库(Ubuntu 16.04上的节点10.8.0)连接到外部websocket api .我有一个监听器只是解析json并将其传递给回调:

this.ws.on('message', (rawdata) => {
    let data = null;
    try {
        data = JSON.parse(rawdata);
    } catch (e) {
        console.log('Failed parsing the following string as json: ' + rawdata);
        return;
    }
    mycallback(data);
});
Run Code Online (Sandbox Code Playgroud)

我现在收到错误,其中的rawData外观如下(我格式化并删除了不相关的内容):

?~A
{
    "id": 1,
    etc..
}?~?
{
    "id": 2,
    etc..
Run Code Online (Sandbox Code Playgroud)

然后我想知道; 这些人物是什么?看到结构我最初认为第一个奇怪的符号必须是数组([)的开括号,第二个是逗号(,),以便它创建一个对象数组.

然后,rawdata每当遇到JSON解析错误时,我都会通过写入文件来进一步调查问题.在一个小时左右的时间里,它已经保存了大约1500个错误文件,这意味着这种情况会发生很多.我cat在终端上编了几个这样的文件,其中我上传了一个例子:

在此输入图像描述

这里有一些有趣的事情:

  1. 文件始终以这些奇怪的标志之一开始.
  2. 这些文件似乎存在于应该单独接收的多条消息中.奇怪的标志将这些个别信息分开.
  3. 文件总是以未完成的json对象结束.
  4. 这些文件的长度各不相同.它们的尺寸并不总是相同,因此不会在特定长度上切断.

我对websockets不太熟悉,但可能是因为我的websocket以某种方式接收到它连接在一起的消息流,这些奇怪的符号作为分隔符,然后随机切断最后一条消息?也许是因为我得到了一个非常快速的消息流?

或者可能是因为服务器端的错误(或功能),它组合了这些单独的消息?

有谁知道这里发生了什么?欢迎所有提示!

[编辑]

@bendataclear建议将其解释为utf8.所以我做了,我粘贴了下面结果的截图.第一个打印是原样,第二个打印为utf8.对我来说这看起来不像什么.我当然可以转换为utf8,然后按这些字符拆分.虽然最后一条消息总是被切断,但这至少会使一些消息变得可读.其他想法仍然欢迎.

在此输入图像描述

javascript json stream websocket node.js

23
推荐指数
1
解决办法
1361
查看次数

如何从Javascript FileReader获取文件名?

我正在使用Javascript FileReader在浏览器中加载图像:

e = e.originalEvent;
e.dataTransfer.dropEffect = 'copy';
this.documentFile = e.dataTransfer.files[0];

var reader = new FileReader();
reader.onloadend = function () {
    if (reader.result) {
        console.log(reader);
        $('#theImage').attr('src', reader.result);
    }
};
reader.readAsDataURL(this.documentFile);
Run Code Online (Sandbox Code Playgroud)

这很好用.我现在想获得图像的原始文件名,但我不知道如何在互联网上查找我也找不到任何东西?

有人知道如何通过FileReader获取文件名吗?欢迎所有提示!

javascript io jquery filereader

22
推荐指数
2
解决办法
3万
查看次数

机器重新启动后,pm2受管进程处于错误状态

我正在使用pm2(版本3.4.1)来管理Laravel Echo Websocket服务器。它运行完美,但是我试图让它在计算机重启(运行Ubuntu 16.04)后自动启动。为此,我遵循以下说明

$ pm2 startup
[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin /usr/local/share/.config/yarn/global/node_modules/pm2/bin/pm2 startup systemd -u kramer65 --hp /home/kramer65

$ sudo env PATH=$PATH:/usr/bin /usr/local/share/.config/yarn/global/node_modules/pm2/bin/pm2 startup systemd -u kramer65 --hp /home/kramer65
[sudo] password for kramer65: 
[PM2] Init System found: systemd
Platform systemd
Template
[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target

[Service]
Type=forking
User=kramer65
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/home/kramer65/.pm2
PIDFile=/home/kramer65/.pm2/pm2.pid

ExecStart=/usr/local/share/.config/yarn/global/node_modules/pm2/bin/pm2 resurrect
ExecReload=/usr/local/share/.config/yarn/global/node_modules/pm2/bin/pm2 reload …
Run Code Online (Sandbox Code Playgroud)

javascript process-management pm2 laravel-echo

20
推荐指数
1
解决办法
330
查看次数

如何在Android选择器中定义粗体?

在我的Android应用程序中,我有几个radion按钮,应该有不同的颜色,并在选择时变得大胆.我通过在drawable中定义radio_pick_color.xml文件来设法获得不同的颜色:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
     <!-- checked -->
     <item android:state_checked="true"
           android:color="#00FF15" /> 
     <!-- default -->
     <item android:color="#4000FF" /> 
</selector>
Run Code Online (Sandbox Code Playgroud)

并在我的main.xml文件中引用此文件:

android:textColor="@drawable/radio_picker_color"
Run Code Online (Sandbox Code Playgroud)

我现在想要使文本变粗.所以我创建了另一个名为radio_picker_style.xml的文件,我想在其中定义这样的样式:

<item android:state_checked="true"
       android:style="bold" /> 
Run Code Online (Sandbox Code Playgroud)

不幸的是eclipse抱怨在'android'包中找不到属性'style'的资源标识符.我也试过android:textStyle,但是从选择器项中它也不知道android:textStyle属性.

有谁知道如何以粗体显示所选的单选按钮?

== EDIT == main.xml文件的相关部分:

<RadioGroup
    android:id="@+id/radioGroup2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <RadioButton
        android:id="@+id/option_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:text="@string/option_1"
        android:textColor="@drawable/radio_picker_color"
        />

    <RadioButton
        android:id="@+id/option_2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/option_2" 
        android:textColor="@drawable/radio_picker_color"
        />
</RadioGroup>
Run Code Online (Sandbox Code Playgroud)

和我试图放在drawable文件夹中的radio_picker_style.xml,但是"属性缺少Android名称空间前缀":

<?xml version="1.0" encoding="utf-8"?>
<style name="mystyle">  
    <item name="android:textColor">#ffffff</item>
    <item name="android:textStyle">bold</item>
</style>
Run Code Online (Sandbox Code Playgroud)

java android

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

AttributeError:'_ AppCtxGlobals'对象在Flask中没有属性'user'

我正在尝试按照Flask Mega教程学习烧瓶.在第5部分中,login()视图是这样编辑的:

@app.route('/login', methods = ['GET', 'POST'])
@oid.loginhandler
def login():
    if g.user is not None and g.user.is_authenticated():
        return redirect(url_for('index'))
    form = LoginForm()
    if form.validate_on_submit():
        session['remember_me'] = form.remember_me.data
        return oid.try_login(form.openid.data, ask_for = ['nickname', 'email'])
    return render_template('login.html', 
        title = 'Sign In',
        form = form,
        providers = app.config['OPENID_PROVIDERS'])
Run Code Online (Sandbox Code Playgroud)

但是,这会给我一个AttributeError,我将在下面粘贴StackTrace.它给出了一个错误,我完全从示例的来源粘贴了一块.我确实使用PeeWee而不是SQLAlchemy,但由于这段代码对DB没有任何作用,我不知道为什么会有相关性.

有谁知道我在这里做错了什么?

Traceback (most recent call last):
  File "/Users/kramer65/dev/repos/microblog/flask/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Users/kramer65/dev/repos/microblog/flask/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/Users/kramer65/dev/repos/microblog/flask/lib/python2.7/site-packages/flask/app.py", line 1403, …
Run Code Online (Sandbox Code Playgroud)

python attributeerror flask

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

如何在Javascript/jQuery中重置超时?

我的网页中有一个字段A,当用户编辑时,调用API调用(使用jQuery),更新字段B.编辑后,应每隔10秒调用一次API以再次更新字段B. .我目前这样做使用:

setTimeout(thisFunction, 10000);
Run Code Online (Sandbox Code Playgroud)

问题是每次用户编辑字段A时都会设置此超时,在编辑字段A几次后会导致多次设置超时并且API被多次调用.这使得网站看起来非常紧张.

我想要做的是,每次编辑字段时都设置一个新的超时,无论是用户编辑字段A,还是间隔达到10秒,从而轮询API.换一种说法; 如果字段B未更新10秒或更长时间,则应更新该字段.

最后,如果用户然后单击按钮C,则轮询应该停止.

所以我的问题; 如果该字段B没有更新10秒或更长时间如何运行更新字段B的功能,如何在我想要的时候停止轮询(当用户点击另一个按钮时)欢迎所有提示!

javascript jquery timeout polling

16
推荐指数
2
解决办法
3万
查看次数

如何使用FormFields的WTForms FieldList?

我正在使用Flask建立一个网站,我在其中使用WTForms.在表单中,我现在想要使用FormFields的FieldList,如下所示:

class LocationForm(Form):
    location_id = StringField('location_id')
    city = StringField('city')

class CompanyForm(Form):
    company_name = StringField('company_name')
    locations = FieldList(FormField(LocationForm))
Run Code Online (Sandbox Code Playgroud)

所以让人们有能力进入一个有两个地点的公司(动态添加地点的时间比较晚)我在前面这样做:

<form action="" method="post" role="form">
    {{ companyForm.hidden_tag() }}
    {{ companyForm.company_name() }}
    {{ locationForm.location_id() }}
    {{ locationForm.city() }}
    {{ locationForm.location_id() }}
    {{ locationForm.city() }}
    <input type="submit" value="Submit!" />
</form>
Run Code Online (Sandbox Code Playgroud)

所以在提交时我打印的位置:

print companyForm.locations.data
Run Code Online (Sandbox Code Playgroud)

但我明白了

[{'location_id': u'', 'city': u''}]
Run Code Online (Sandbox Code Playgroud)

我可以使用locationForm打印第一个位置的值(见下文),但我仍然不知道如何获取第二个位置的数据.

print locationForm.location_id.data
print locationForm.city.data
Run Code Online (Sandbox Code Playgroud)

所以位置列表确实有一个带空值的dict,但是:

  1. 为什么地点列表只有一个,而不是两个?
  2. 为什么位置中的值是空的?

有谁知道我在这里做错了什么?欢迎所有提示!

python forms fieldlist flask wtforms

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

如何在OSX的单独进程中阅读网络摄像头?

我正在OSX上读一个网络摄像头,这个简单的脚本可以正常工作:

import cv2
camera = cv2.VideoCapture(0)

while True:
    try:
        (grabbed, frame) = camera.read()  # grab the current frame
        frame = cv2.resize(frame, (640, 480))  # resize the frame
        cv2.imshow("Frame", frame)  # show the frame to our screen
        cv2.waitKey(1)  # Display it at least one ms before going to the next frame
    except KeyboardInterrupt:
        # cleanup the camera and close any open windows
        camera.release()
        cv2.destroyAllWindows()
        print "\n\nBye bye\n"
        break
Run Code Online (Sandbox Code Playgroud)

我现在想要在一个单独的进程中阅读视频,我的脚本更长,并且在Linux上的单独进程中正确地读取视频:

import numpy as np
import time
import ctypes
import argparse

from multiprocessing …
Run Code Online (Sandbox Code Playgroud)

python macos opencv multiprocessing pathos

15
推荐指数
2
解决办法
1080
查看次数

如何将终端向后滚动到最后一个命令的位置?

我有一个有很多输出的程序.一旦完成,我经常想回滚到运行的开始,以便我可以看到那里的一些东西.由于输出很长,我看到自己无休止地使用PageUp滚动并尝试将右侧的滚动条拖动到可能已经开始的位置.过了一段时间,这开始变得非常无聊,所以我想知道:

有没有办法让终端滚动回到最后一个命令的部分?

bash terminal command-line scroll

14
推荐指数
5
解决办法
4005
查看次数

如何使用pip在Python3上安装Flask?

我想尝试使用Flask和Python3.我在Ubuntu 14.04上有Python 3.4,据说包含了pip.所以我试过了

pip3 install flask
Run Code Online (Sandbox Code Playgroud)

这结束于:

Cleaning up...
Command /usr/bin/python3 -c "import setuptools, tokenize;__file__='/tmp/pip_build_kramer65/flask/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-i98xjzea-record/install-record.txt --single-version-externally-managed --compile failed with error code 1 in /tmp/pip_build_kramer65/flask
Storing debug log for failure in /tmp/tmpqc3b2nu5
Run Code Online (Sandbox Code Playgroud)

所以我尝试导入它,但无济于事:

kramer65@vps1:~/cxs$ python3
Python 3.4.0 (default, Apr 11 2014, 13:05:11)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import flask
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named …
Run Code Online (Sandbox Code Playgroud)

python pip flask python-3.x

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