记一个腾讯信鸽引发的线程卡死问题

基于腾讯信鸽推送平台详细说明 1、下载腾讯信鸽SDK 它下面有两个版本:基础版和Pro版(以下以基础版说明) 下载地址:http://xg.qq.com/xg/ctr_index/download 注:信鸽ProiOS SDK是信鸽iOSSDK的加强版,整合MTA的数据分析能力(推荐用Pro版) 2、登录后,创建应用 3、创建完成后,进行应用配置(点击“应用配置”) 4、验证开发证书和生产证书 配 阅读详情

一天公司的游戏有大量玩家报自动战斗、种植等操作无法进行,第一时间想到可能是因为玩家的定时任务线程卡死了。用jstack查看线程堆栈日志,发现都卡在了一个http read的地方。

公司使用腾讯信鸽做手游的系统推送,卡住的地方就是调用信鸽的服务端sdk向信鸽服务器发送http请求,并等待回应的时候。

因为是调用第三方jar包,所以无法直接设置读超时。在网上搜索到一种方法是通过系统变量设置超时时间:

 System.setProperty("sun.net.client.defaultReadTimeout", 3000);

测试过有效之后上线。

本以为万事大吉了。结果过了一段时间又报出大量玩家无法自动战斗,后面一看还是这个问题。

说明设置的系统变量并未生效。

于是在线下详细测试,发现一个奇怪的问题:在两个不同的工程中设置这个系统变量,一个是有效的,一个是无效的。

不过能够复现问题就是件好事。查看堆栈对应的jdk源码,发现是sun包下的,不开源。再找到openjdk源码,研究后发现是NetworkClient的static代码块的执行时机的问题。

原来java在第一次生成http请求时,会从系统变量sun.net.client.defaultReadTimeout读取默认读超时时间并放在缓存里,以后即使修改了这个系统变量,也不会影响默认读超时时间了。

知道了问题的原因,那就知道解决办法了:将默认读超时设在程序的起始位置,或者启动脚本中。

后面向腾讯信鸽写邮件反映这个问题。在最新版的SDK中看到已经得以修正。

总结:

  1. 使用http请求一定要设置连接超时和读超时,否则网络一出问题就会卡死。
  2. 在涉及第三方类库时使用单独的线程池,与业务线程池分离。因为你永远不知道里面会有什么未知的问题。
腾讯信鸽PHP SDK使用详解与实战 信鸽服务,是一种高效的远程消息传递服务,广泛应用于移动应用推送通知、服务器对设备的消息通知等领域。自推出以来,信鸽服务经历了从基础的消息推送到个性化、智能化的消息服务的演变过程。它通过集成先进的推送技术,实现了从简单的单向通信到复杂的多渠道、多场景通信的转变。设备注册是使用信鸽服务的第一步,其目的是将设备信息存储在服务端,以便后续进行消息推送。信鸽服务为开发者提供了一个设备注册的API接口,通过该接口可以完成设备信息的注册。 阅读详情

相关推荐

.NET腾讯信鸽服务端实现与详解

腾讯信鸽是一款为移动应用开发者提供的消息推送服务。它起源于腾讯公司,旨在帮助开发者高效、稳定地向用户推送通知和消息。腾讯信鸽的服务特点包括高到达率、低延迟、精确的目标用户群体推送以及丰富的内容展示形式。腾讯信鸽作为专业的推送服务,支持包括文本、图片、视频等多种消息格式,以及定时、按标签等多种推送方式。此外,信鸽还提供了详细的推送数据统计和分析功能,帮助开发者优化推送策略,提高用户的参与度和留存率。

weixin_35006125的博客 914

腾讯信鸽的基本使用

著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:唐大锤 链接:http://www.zhihu.com/question/24857498/answer/29220818 来源:知乎 总体腾讯信鸽推送开发流程 登陆QQ—>注册程序名—>选择应用—>上传证书—>集成开发­—>集成开发—>测试应用—>发布应用 第一步,客户端集成 1. 登陆以及

ios_xumin的专栏 2948

腾讯信鸽推送服务Python SDK实战教程

腾讯信鸽(信鸽推送)提供了一套完整的设备无关消息推送服务,能够帮助开发者向指定的用户推送通知、消息。腾讯信鸽Python SDK是一套针对Python开发者而设计的客户端SDK,使得开发者可以在Python项目中轻松地集成消息推送功能。使用Python SDK可以方便快捷地实现消息的发送、管理以及与腾讯信鸽服务的无缝对接。为了提升用户体验,开发者常常需要对消息内容和格式进行自定义。自定义可以包括消息类型、图片、音频和点击行为等。

weixin_35750747的博客 1196

腾讯-信鸽实现消息推送

腾讯-信鸽实现消息推送

永青技术博客 1万+

腾讯信鸽接入demo

接入腾讯信鸽推送,简单易懂,好上手,新手指导,快速接入

腾讯信鸽jar

java推送消息服务

腾讯信鸽-百亿级别的消息推送背后的技术了解下

作者:甘恒通,2011年加入腾讯TEG数据平台部,主要负责大数据平台、推送平台后台的研发和优化工作,对构造高可用、高性能的分布式大数据处理和推送系统有丰富的实战经验,近期工作内容是构建信...

QcloudCommunity的博客 430

Python与numpy版本兼容性排查指南

本文详细解析了Python与numpy版本兼容性问题,提供了快速诊断和解决版本冲突的实用方法。通过查看版本信息、使用官方兼容性对照表以及降级或升级环境等方案,帮助开发者有效避免常见的报错问题,如'ImportError'和'AttributeError'。文章还介绍了使用虚拟环境和requirements.txt等工程实践,确保项目依赖的稳定性。

weixin_29089057的博客 319

腾讯移动推送(信鸽)首家通过Android 8.0兼容测试

腾讯信鸽率先支持Android 8.0! 腾讯移动推送(信鸽)作为优秀的移动APP推送第三方,首家通过Android 8.0兼容性测试,请开发者放心使用。 腾讯移动推送(信鸽)一直以来为开发者提供着高效、稳定、免费的移动推送服务。支持百亿级的通知/消息推送PUSH,将相关信息及时送达...

choujiaohe3351的博客 319

SICK LMS111激光雷达数据解析实战:从原始帧到三维点云的完整流程

本文详细解析了SICK LMS111激光雷达从原始数据帧到三维点云的完整处理流程,包括数据帧结构解析、坐标转换、点云可视化及性能优化技巧。通过实战代码示例,展示了如何高效处理激光雷达数据,并应用于动态物体检测、地面分割等工业场景,为AGV和服务机器人开发者提供实用指南。

garlic的博客 769

uniapp 使用摄像头 live-pusher (APP)

uniapp 中开发 app 时使用live-pusher踩过的坑

随身笔记 1万+

android信鸽推送demo_腾讯信鸽Android推送集成全解

Android开发中集成信鸽推送还是比较简单的,但是遇到了坑就麻烦[TOC]先介绍一下集成信鸽推送的步骤1.build文件中添加依赖//信鸽的版本compile 'com.tencent.xinge:xinge:3.1.1-alpha'//mid包的版本compile 'com.tencent.mid:mid:3.721-alpha'2.添加自定义广播MessageReceiver接收推送消息an...

weixin_36341500的博客 535

UWB学习——day4

总的来说,BPM-BPSK调制方案是一种利用脉冲位置和相位来编码信息的高效数字调制技术,特别适用于UWB通信系统,以实现高速数据传输和频谱效率。这种方式将时间和相位综合使用,从而提高了数据传输的容量。总之,超外差结构是一种接收器设计,通过将不同频率的信号转换到一个共同的中间频率来提高信号选择性和抗干扰性。超外差结构是一种用于接收器的电子电路设计,它的目标是从无线信号中提取有用的信息,比如音频、数据或图像。该芯片的接收机是超外差结构,所谓超外差结构一种基于频率转换的接收器架构,旨在提高信号选择性和抗干扰性。

许帅的博客 2557

android接入腾讯信鸽推送服务(基于AndroidStudio)

一、快速上手 第一步:引入SDK 下载android-SDK,解压,引入AS,这里要注意的是,先切换到project项目结构下,把jar文件引入到libs(该文件夹无需新建,与src同级)文件夹下。这里有个坑,信鸽的SDK中带有一个support-v4包,如果原项目中用到v4包了,这里...

chuanao8829的博客 594

GD32F303实战:用定时器4触发ADC2+DMA,实现10ms精准采样1024点的完整流程

本文详细介绍了在GD32F303微控制器上使用Timer4触发ADC2配合DMA传输,实现10ms精准采样1024点的完整方案。从硬件架构设计、时钟树配置到定时器参数计算,提供了完整的工程实现流程和常见问题排查方法,适用于工业传感器监测等高实时性场景。

weixin_29194693的博客 433

secureCRT 破解方法

3、输入注册信息打开keygen.exe,点击path,选择SecureCRT的安装目录(例如D:\VanDykeSoftware\Clients)的securecrt.exe打开,继续下一步打开LicenseHelper.exe,如下。1、注册SecureCRT9.1打开keygen.exe,出现以下问题(没有关掉安全防护,一双击打开,Windows会自动识别keygen.exe为bingdu并删除)打开桌面SecureCRT,此界面不输入内容,直接点击下一步。2、存储配置文件夹(可以默认安装)

逆水行舟 1万+

腾讯信鸽海量移动推送服务是如何构建的

InfoQ:各位观众大家好,我们现在正在2018 QCon全球软件开发大会上海站的现场,InfoQ很荣幸地邀请到了腾讯数据平台部高级工程师郭生求老师接受我们的采访,首先请郭老师简单介绍一下自己吧。郭生求:好,谢谢主持人,大家好。我叫郭生求,来自腾讯公司数据平台部,最近一直在做的是一个实时的推送系统,叫腾讯信鸽,本人目前的工作主要集中在后台系统的开发,包括系统优化工作。InfoQ:好的,谢谢郭老师。...

cpongo011702 399

2023华为od机试C卷【最富裕的小家庭】Python 实现

在一颗树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为个小家庭。现给你一颗树,请计算出最富裕的小家庭的财富和。

MISAYAONE的博客 2043

腾讯信鸽推送(一):服务端架构

         目前厂商通道有华为、小米、魅族、海外FCM,oppp需要邀请才能集成,vivo目前只支持几个大厂集成,例如腾讯,阿里巴巴。oppo,vivo目前还处于内测当中。当时找过极光、个推,他们虽然支持厂商通道集成,但必须要成为他们的VIP才支持该功能。而腾讯信鸽集成厂商通道是免费的。于是我的计划是苹果手机就用个推,华为、小米、魅族、海外FCM用腾讯信鸽推送,安卓其他的手机用极光推送。等o...

zhou609908431的专栏 2272

HarmonyOS 鸿蒙开发DevEco Studio OpenHarmony:安全测试

通过对HarmonyOS应用生命周期建模和应用攻击面建模,采用静态数据流分析技术,提高漏洞发现的准确率,同时覆盖20余种攻击面,65+漏洞测试项,帮助开发者提前发现和识别漏洞隐患。在检测报告中,会针对每一项漏洞风险项给出明确的修复建议,可以帮助开发者快速修复漏洞。

斌擎科技 1182

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

腾讯信鸽自定义推送通知

使用信鸽的过程,感觉一路艰辛,各种坑,想必各位使用过的也是深有体会的吧。而且官方文档也太简洁了。demo功能也不全,没办法只能自己摸索着来,这不刚把自定义通知弄明白,就给各位看官献上来了。1. XGPushManager功能类自定义本地通知样式 void setPushNotificationBuilder(Context context, int notificationBulderId

风吹过wu的博客 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

集成腾讯信鸽推送遇到的大坑

前段时间项目集成信鸽推送,官方给的证书创建和集成方法在这里,这里我也是严格按照官方给的方法做了,按照验证证书的方法测试证书合法性也能通过,但就是上传不成功,尝试了各种办法,重新创建了三次,都失败了,最后突然发现一个问题,报着试试看的态度试了一下,竟然成功了,现在告诉大家,希望大家的集成之路不再有坑。        集成中如下步骤的时候,填写“常用名称”,一定不能用中文!不能用中文!不能用

fuzheng的博客 4038

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

腾讯信鸽错误码

10109 未知异常,切换网络 或者 重启设备) 怀疑是AndroidStudio编译后替换安装就出问题了,为了排除这情况,请先卸载再安装 http://docs.developer.qq.com/xg/push_ret_code.html

zhong8888888800的博客 1392

android腾讯信鸽集成遇到的坑

1.默认跳转页面的修改腾讯信鸽推送存在一个问题,如果后台不指定一个推送界面Activity 默认会打开应用 如果让后台来指定界面,感觉前后端就耦合在一起,并且很不方便,我想到比较好解决的办法就是,在应用的启动Activity里面获取XGPushClickedResult,如若数据存在就说明是推送过来的打开的界面,可以在onResume方法中直接finish界面,这样用户是无感知的,代码如下 p

lizubing1992的专栏 1946

腾讯信鸽推送基本流程和数据的处理流程

项目中从之前的极光推送改为现在的信鸽推送,看了信鸽官网的文档,大致了解了一下信鸽的用法,有下载了一个信鸽demo,demo中内容太多,有很多不是我们需要的,所以就需要你自己去甄别废话不多说,据目前信鸽官方demo中有用的是APP.java,SettingActivity.java,MessageReceiver.java。下面的内容只是给自己留一个笔记,下次可以作为参考: 从信鸽后台发送

qice675563721的专栏 5554
上一篇: 《我所理解的Cocos2d-x》书评及笔记
下一篇: 如何将普通Java工程转成Maven工程
长三月
博客等级 码龄9年 228粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值